• 0
MidooX10

كيفيه تعديل هذا الكود للحصول على عنوان النافذه من خلال ال اسم البروسس الخاص بها

سؤال

سألت فى موضوع سابق عن التأكد ما اذا كان برنامج معين يعمل ام لا و اخى Mr B لم يقصر ف الاجابه لكن الان هل يمكن تعديل الكود الذى اعطاه لى او كتابه غيره للتحصول على عنوان النافذه من خلال ال process name لها

 

مثال للتوضيح

مدخلات البرنامج : notepad.exe

المخرجات : New Text Document - Notepad ( بفرض ان هناك ملف نصى بهذا الاسم مفتوح بواسطه ال نوت باد )

 

كود Mr B

#define UNICODE#include <Windows.h>#include <TlHelp32.h>#include <stdio.h>intmain(void){HANDLE Snapshot;Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(Snapshot != INVALID_HANDLE_VALUE) {PROCESSENTRY32 ProcessEntry;BOOL Succeed;ProcessEntry.dwSize = sizeof(PROCESSENTRY32);Succeed = Process32First(Snapshot, &ProcessEntry);while(Succeed) {if(lstrcmp(ProcessEntry.szExeFile, L"notepad.exe") == 0) {printf("notepad.exe found, id %ld\n", ProcessEntry.th32ProcessID);}Succeed = Process32Next(Snapshot, &ProcessEntry);}CloseHandle(Snapshot);}return 0;}

ملحوظه : السؤال لغرض تعليمى لا للاستخدام فى عمل برنامج ,, بمعنى انى لم اخالف قوانين المنتدى 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

العملية قد تكون فيها أكثر من نافذة، أي أكثر من thread في كل واحد نافذة، لايشترط أن تكون مرئية!.

 

يمكنك عرض قائمة بالنوافذ باستخدام EnumWindows، ستحصل على مقبض للنافذة، استخرج معرف العملية التي تتبع له باستخدام GetWindowThreadProcessId، وقارنه بالعملية التي تريد، يمكنك الحصول على اسم النافذة وقتها باستخدام GetWindowText.

#define UNICODE#include <Windows.h>#include <stdlib.h>#include <stdio.h>#include <io.h>      /* _setmode, _fileno */#include <fcntl.h>   /* _O_U16TEXT */static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);intmain(void){  DWORD ProcessId = 4176; /* العملية التي تريدها */  /* wprintf للتأكد من ظهور النصوص العربية مع */  _setmode(_fileno(stdout), _O_U16TEXT);  EnumWindows(EnumWindowsProc, (LPARAM)&ProcessId);  return 0;}static BOOL CALLBACKEnumWindowsProc(HWND hwnd, LPARAM lParam){  DWORD TargetProcessId = *(const DWORD *)lParam;  DWORD CurrentProcessId;  GetWindowThreadProcessId(hwnd, &CurrentProcessId);  if(CurrentProcessId == TargetProcessId) {    int TextLength = GetWindowTextLength(hwnd);    TCHAR *Text;    if(TextLength) {      Text = (TCHAR *) malloc(TextLength * sizeof(TCHAR) + sizeof(TCHAR));      if(Text != NULL) {        GetWindowText(hwnd, Text, TextLength + 1);        wprintf(L"%ls\n", Text);        free(Text);      }    }  }  return TRUE;}

المثال مبني باستخدام msvc.

تم تعديل بواسطه Mr.B
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الكود لا يطبع عنوان النافذه ,, فقط يطبع بعض الاحرف !

تم تعديل بواسطه Mohamed El Sayed
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .