26 Şubat 2020 Çarşamba

Windows taskkill komutu

Giriş
Windows'ta Linux'taki kill komutu yerine taskkill komutu kullanılır. Bu komut eğer /f yani force ile kullanılmıyorsa WM_CLOSE mesajı gönderiyor sanırım.

/F seçeneği - forcefully
taskkill /f /im notepad.exe
Şöyle bir açıklama var
The /f switch would force the kill, but not using it just sends the termination signal so the application closes gracefully.
/FI seçeneği
Örnek
Pencere ismine göre seçmek için şöyle yaparız
taskkill /F /FI "WINDOWTITLE eq cmd005" /T

/IM seçeneği - image name
Örnek
Şöyle yaparız
taskkill /im notepad.exe

/PID seçeneği
Şöyle yaparız.

taskkill /pid 1234

/T seçeneği - kill any child processes as well
Örnek
Şöyle yaparız
taskkill /f /im /t explorer.exe

25 Şubat 2020 Salı

PostMessage metodu

Örnek
Şöyle yaparız.
HWND hWndParent =...;
PostMessage( hWndParent, SOME_SPECIAL_MSG, 0, 0);

EnumDisplaySettings metodu - Belirtilen Ekranın Ayarlarını Okur

Giriş
Belirtilen ekranın ayarlarını DEVMODE yapısına doldurur. Açıklaması şöyle
Monitors are sending EDID data which contains some information about the display, including its physical dimensions.
Örnek
Ayarları okuyup değiştirmek için şöyle yaparız
#include <windows.h>

int main()
{
  for (DWORD devNum = 0; ; devNum++)
  {
    DISPLAY_DEVICE dev = {0};
    dev.cb = sizeof(DISPLAY_DEVICE);

    if (!EnumDisplayDevices(NULL, devNum, &dev, EDD_GET_DEVICE_INTERFACE_NAME))
      break;

    wprintf(L"Display name: %s \n", dev.DeviceName);

    DEVMODE dMode = { 0 };
    dMode.dmSize = sizeof(dMode);

    if (!EnumDisplaySettings(dev.DeviceName, ENUM_CURRENT_SETTINGS, &dMode))
    {
      wprintf(L"EnumDisplaySettings error: %d \n", GetLastError());
      continue;
    }
    wprintf(L"Display old settings: \n");
    wprintf(L"dmBitsPerPel: %d \n", dMode.dmBitsPerPel);
    wprintf(L"dmPelsWidth: %d \n", dMode.dmPelsWidth);
    wprintf(L"dmPelsHeight: %d \n", dMode.dmPelsHeight);
    wprintf(L"dmDisplayFlags: %x \n", dMode.dmDisplayFlags);
    wprintf(L"dmDisplayFrequency: %d \n", dMode.dmDisplayFrequency);

    dMode.dmPelsWidth = 800;
    dMode.dmPelsHeight = 600;
    ChangeDisplaySettingsEx(dev.DeviceName, &dMode, NULL, 0, NULL);
    ...
  }

  getchar();
}
Daha sonra yeni ayarları yazdırmak için şöyle yaparız
#include <windows.h>

int main()
{
  for (DWORD devNum = 0; ; devNum++)
  {
    ...
    DEVMODE dModeNew = { 0 };
    dModeNew.dmSize = sizeof(DEVMODE);
    if (!EnumDisplaySettings(dev.DeviceName, ENUM_CURRENT_SETTINGS, &dModeNew))
    {
      wprintf(L"EnumDisplaySettings error: %d \n", GetLastError());
      continue;
    }

    wprintf(L"Display new settings: \n");
    wprintf(L"dmBitsPerPel: %d \n", dModeNew.dmBitsPerPel);
    wprintf(L"dmPelsWidth: %d \n", dModeNew.dmPelsWidth);
    wprintf(L"dmPelsHeight: %d \n", dModeNew.dmPelsHeight);
    wprintf(L"dmDisplayFlags: %x \n", dModeNew.dmDisplayFlags);
    wprintf(L"dmDisplayFrequency: %d \n", dModeNew.dmDisplayFrequency);

  }

  getchar();
}