· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Завершение процесса и кое-что ещё...

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщен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! А он кто?
Сдаюсь, напишите пример для "зелёных"... ;)

<< . 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044