monrus
							
								Опытный 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 «  : 01-01-2010 06:15 »   | 
								
								 | 
							  
							 
							Всех с Новым годом!!! Есть прог рамма - ищет среди запущенных окон по первой букве окно.  Но работает , если спереди  invoke lstrcmp,offset buff,chr$("$Tsk") , если ее убрать , то не находит. Почему? .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib ;include find.inc include \masm32\macros\macros.asm
  EnumWindowsProc PROTO :DWORD, :DWORD
  .data .data?
  Wnd dd ? buff db 256 dup(?)
  .code
  start:
  Invoke	EnumWindows,offset EnumWindowsProc,0
  EnumWindowsProc PROC hwnd:HWND,lParam:LPARAM 	              Invoke	GetWindowText,hwnd,offset buff,256 		        	 invoke lstrcmp,offset buff,chr$("$Tsk") 	test eax,eax 	 cmp byte ptr buff,24h	; сравнение с "$" 	 jnz next 	 Invoke	MessageBox,0,offset buff,0,0 	next: 	ret EnumWindowsProc ENDP
  xor edi, edi invoke ExitProcess, edi ret end start
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 01-01-2010 09:19 от Sel »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							darkelf
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 11-01-2010 06:34 »   | 
								
								 | 
							  
							 
							наверное потому, что в этой функции и происходит сравнение? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 12-01-2010 04:06 »   | 
								
								 | 
							  
							 
							ткни пальцем в строчку, от которой ты ожидаешь получить результат сравнения 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							monrus
							
								Опытный 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 12-01-2010 13:50 »   | 
								
								 | 
							  
							 
							хочу чтобы было так: EnumWindowsProc PROC hwnd:HWND,lParam:LPARAM 	              Invoke	GetWindowText,hwnd,offset buff,256 	 cmp byte ptr buff,24h	; сравнение с "$" 	 jnz next 	 Invoke	MessageBox,0,offset buff,0,0 	next: 	ret EnumWindowsProc ENDP  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							darkelf
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 12-01-2010 14:47 »   | 
								
								 | 
							  
							 
							у меня работает такой пример, правда это для dos, но сути это не меняет.  .model small .data
  buff db "$Tsk$" msg  db "Tsk found$"
  .code
  start: 	assume cs:@code,ds:@data 	mov ax,@data 	mov ds,ax
  	cmp byte ptr buff,24h	; сравнение с "$" 	jnz next 	mov ah,9 	mov dx,offset msg 	int 21h 	next: 	mov ax,4c00h 	int 21h end start
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	| 
		
		
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 12-01-2010 19:45 »   | 
								
								 | 
							  
							 
							Народ, не забываем про кодировку. В DOS одна, в Windows их две UNICODE и ANSI. Так в какой кодировке происходит сравнение первого символа? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							darkelf
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 13-01-2010 06:09 »   | 
								
								 | 
							  
							 
							Serg79, кстати это идея, если GetWindowText возвращает уникодную строку, но тогда надо сравнивать не байт, а слово.. т.е. buff dw 256 dup(?) ... cmp word ptr buff, 24h
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 13-01-2010 11:05 »   | 
								
								 | 
							  
							 
							Да, только в DOS по моему используется ASCII кодировка а в Windows UNICODE и ANSI. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							darkelf
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 13-01-2010 11:37 »   | 
								
								 | 
							  
							 
							в MS-DOS используется cp866, в Windows обычно: в консоли cp866 (OEM), в графике cp1251(ANSI) и Unicode (точнее его разновидность UTF-16), но для всех трёх код символа '$' будет одинаковый (различаются только старшая часть кодовой таблицы для кодов символов >127, куда обычно попадают, для русских кодировок, кириллические буквы и псевдографика), разве что для Unicode код символа будет не байт, а 16-ти разрядное слово. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 13-01-2010 11:39 от darkelf »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							monrus
							
								Опытный 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 13-01-2010 14:59 »   | 
								
								 | 
							  
							 
							когда прохожу дебаггером, то видно что идет сравнение $ и $ 
  
						 | 
					 
					
						
							
								
									 
									
								 | 
							 
								| 
									« Последнее редактирование: 13-01-2010 15:06 от monrus »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							darkelf
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 13-01-2010 15:55 »   | 
								
								 | 
							  
							 
							monrus, и что? не сравнивается? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							monrus
							
								Опытный 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 13-01-2010 16:34 »   | 
								
								 | 
							  
							 
							так все работает - повторяюсь - если убрать строчку invoke lstrcmp,offset buff,chr$("$Tsk"), то не работает. Хотя бы уж рабочий пример дайте что ли    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							monrus
							
								Опытный 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #13 : 13-01-2010 18:04 »    | 
								
								 | 
							  
							 
							все - разобрался: EnumWindowsProc PROC hwnd:HWND,lParam:LPARAM 	              Invoke	GetWindowText,hwnd,offset buff,256 	 cmp byte ptr buff,24h	; сравнение с "$" 	 jnz next 	 Invoke	MessageBox,0,offset buff,0,0              mov eax, 0              ret 	next:             mov eax,1 	ret EnumWindowsProc ENDP  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |