|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 23, 2003 04:19:01 Asterix С ToolHelp не всё так просто, код написанный под 98-ю винду не хочет работать в 2k/XP. Так это код не хочет работать, а не ToolHelp :) У меня тоже был подобный случай... Глюк был связан с регистром букв в именах процессов, если память не изменяет. Решился элементарно. |
|
|
Дата: Окт 23, 2003 04:36:02 Не знаю, я причины не нашёл, в 98 всё пахало как надо ;-) |
|
|
Дата: Окт 23, 2003 09:45:42 · Поправил: 1990 Извините, возможно мне давно знать С++, но не могли бы вы написать пример для МАСМ. |
|
|
Дата: Окт 23, 2003 11:37:20.386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data szTargetClassName db "SciCalc", 0 .code start: invoke FindWindow, addr szTargetClassName, NULL push eax invoke GetWindowThreadProcessId, eax, esp invoke PostThreadMessage, eax, WM_QUIT, 0, 0 pop eax ret end start Гы-гы-гы :o) |
|
|
Дата: Окт 23, 2003 12:29:13 Но ... это не то. Как бы сказть, нужно завершить messagebox.exe, не знаю я его TargetClass. :) |
|
|
Дата: Окт 23, 2003 12:30:42 И больше предложений нет? |
|
|
Дата: Окт 23, 2003 14:03:44 я ведь выложил уже бл. готовый пример сунь его в VC++ а потом скопируй листинг. |
|
|
Дата: Окт 23, 2003 14:30:37 · Поправил: Four-F [ 1990: Но ... это не то. ] Ну вот! Сам для calc.exe просил, а терь не то. Не знаешь имя класса - ищи по заголовку окна. .data szTargetWindowName db "Bla-bla-bla", 0 .code start: invoke FindWindow, NULL, addr szTargetWindowName Не знаешь ни имени класса, ни заголовка, но знаешь имя екзе, тогда toolhelp или psapi, как предлагали выше. А готовый код... Вот выдрал из какой-то своей древней проги. Работает оно или нет уже не помню. .data
szTargetName db "target.exe", 0
.code
FindTargetProcess proc uses edi esi ecx
; Returns TargetProcessId
LOCAL szFileName[MAX_MODULE_NAME32 + 1]:CHAR
LOCAL ProcessEntry32:PROCESSENTRY32
LOCAL hSnapShot:HWND
LOCAL dwResult:DWORD
mov dwResult, 0
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
.if eax != -1
mov hSnapShot, eax
mov ProcessEntry32.dwSize, sizeof PROCESSENTRY32
invoke Process32First, hSnapShot, addr ProcessEntry32
.if eax == TRUE
.while eax != 0
lea esi, ProcessEntry32
assume esi:ptr PROCESSENTRY32
lea edi, [esi].szExeFile
invoke lstrlen, edi
mov ecx, eax
add edi, eax
mov al, '\'
pushfd
std
repne scasb
inc edi
inc edi
popfd
invoke lstrcpy, addr szFileName, edi ; copy filename without path
invoke lstrcmpi, addr szFileName, addr szTargetName
.if eax == 0
mov eax, [esi].th32ProcessID
mov dwResult, eax
.break
.endif
invoke Process32Next, hSnapShot, addr ProcessEntry32
.endw
invoke CloseHandle, hSnapShot
.endif
.endif
mov eax, dwResult
ret
FindTargetProcess endp
FindTargetProcess даст те пид. Дальше примерно так: invoke OpenProcess, PROCESS_TERMINATE, FALSE, PID push eax ; CloseHandle invoke TerminateProcess, eax, 0 call CloseHandle Но PostThreadMessage, , WM_QUIT намного красивее ;-) |
|
|
Дата: Окт 23, 2003 14:34:09 1990 У диалогового окна MessageBox, (как и у любого диалогового окна), имя класса - "#32770". |
|
|
Дата: Окт 23, 2003 20:08:41 Спасибо большое "! Буду завершать! ;) |
|
|
Дата: Окт 23, 2003 20:28:15 А как обозначить PID? Всё не компилиться из-за него! Подскажите, плз"! |
|
|
Дата: Окт 23, 2003 21:16:52 Хей, хей. Ну что же значитъ PID??? |
|
|
Дата: Окт 23, 2003 21:23:28 · Поправил: Asterix 1990 Гы, PID обозначить нужно так: ProcessEntry32.th32ProcessID или судя по исходнику Four-F лучше на [esi].th32ProcessID А ещё правильнее, у Four-F PID заносится в переменную dwResult, поэтому используй её или eax, короче смотря куда ты впихнул код про TerminateProcess ;-) |
|
|
Дата: Окт 23, 2003 22:47:43 Хочу просто приложение "гасящие" таргет exe, Asterix, не поможешь с примером. Эта твоя фраза меня напугала - куда впихнуть... ;) |
|
|
Дата: Окт 23, 2003 22:50:10 Но код не компилиться - спрашивает про PID! А он кто? Сдаюсь, напишите пример для "зелёных"... ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044 |