jump to navigation

Disable CTRL-ALT-DEL Thu - Mar 14, 2002

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Kadang kalanya kita menginginkan agar user tidak dapat sembarang menekan tombol sakti CTL-ALT-DEL, sehingga tidak mengganggu kerja sistem yang ada.

Trik untuk mengarasi hal ini yaitu dengan menggunakan API. Logika sebenarnya adalah memaksa window ke modus screen server, sehingga seolah-olah window sedang menjalankan screen server.

Option Explicit

Private Const SPI_SCREENSAVERRUNNING = 97&

Private Declare Function SystemParametersInfo Lib "User32" _
  Alias "SystemParametersInfoA" ( _
  ByVal uAction As Long, _
  ByVal uParam As Long, _
  lpvParam As Any, _
  ByVal fuWinIni As Long) As Long

Private Sub Command1_Click()
  ' Disable ctrl-alt-del dan alt-tab
  Dim lngRetVal    As Long
  Dim blnPrevValue As Boolean
  lngRetVal = SystemParametersInfo(SPI_SCREENSAVERRUNNING, _
    True, _
    blnPrevValue, 0&)
End Sub

Private Sub Command2_Click()
  'Enable ctrl-alt-del dan alt-tab
  Dim lngRetVal    As Long
  Dim blnPrevValue As Boolean
  lngRetVal = SystemParametersInfo(SPI_SCREENSAVERRUNNING, _
    False, _
    blnPrevValue, 0&)
End Sub

Menyembunyikan Proses pada TASK Manager Sat - Sep 9, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Adakalanya kita menginginkan agar proses dari applikasi yang dibuat tidak terlihat/ditampilkan pada TASK Manager, atau dialog yang muncul pada saat CTRL+ALT+DEL ditekan. Tujuan pokok-nya adalah untuk menghindari agar applikasi kita yang sedang berjalan tidak sembarangan dapat di End-Task.

Fungsi API kali ini yang digunakan adalah GetCurrentProcessId() yang fungsi utamanya untuk mendapatkan Process ID dari aplikasi yang saat ini berjalan. Dan fungsi RegisterServiceProcess() untuk mendaftarkan proses servis. Berikut syntak dari fungsi RegisterServiceProcess():

DWORD RegisterServiceProcess( dwProcessID, dwType )

Yang mana:

  • dwProcessID adalah Identifier dari proses yang akan diregister kedalam proses service. Jika NULL maka proses yang akan diregister adalah yang saat itu sedang aktif.
  • dwType merupakan nilai penentu apakah proses akan diregister atau di unregister. Jika nilai dwType adalah 1 maka proses akan disembunyikan/unregister dari service proses/Task Manager, dan proses akan ditampilkan/di-register pada proses service apabila dwType diset menjadi 0.

Berikut listing lengkap:
NB: cbTampilkan merupakan CheckBox Control.

Option Explicit
' Dapatkan No Proses yang akan di Register/Un-register
Private Declare Function GetCurrentProcessId Lib "kernel32" () _
  As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () _
  As Long
' Set register/un-register proses
Private Declare Function RegisterServiceProcess Lib "kernel32" _
  (ByVal dwProcessID As Long, ByVal dwType As Long) As Long

Private Sub cbTampilkan_Click()
  TampilkanPadaTask cbTampilkan.Value
  If cbTampilkan.Value Then
    Me.Caption = "Ditampilkan pada Task Manager"
  Else
    Me.Caption = "Disembunyikan dari Task Manager"
  End If
End Sub

Private Sub Form_Load()
  ' TampilkanPadaTask False
  Call cbTampilkan_Click
End Sub

Public Sub TampilkanPadaTask(bShow As Boolean)

Dim lProcessID As Long, lRegProcess As Long
lProcessID = GetCurrentProcessId()
If bShow Then
  ' Tampilkan pada Task Manager
  lRegProcess = RegisterServiceProcess(lProcessID, 0)
Else
  ' Sembunyikan pada Task Manager
  lRegProcess = RegisterServiceProcess(lProcessID, 1)
End If
End Sub

Shuting down Window (dengan menggunakan API) Sat - Jun 17, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

API (Application Programming Interface) merupakan jembatan penghubung antara Aplikasi dengan sistem Operasi, begitu banyaknya fungsi-fungsi yang ada dan sangat bermanfaat menjadikan API sebagai senjata pamungkas untuk menghasilkan program yang handal. Diantaranya adalah untuk memaksa window melakukan aksi ShutDown, contoh sederhana penggunaannya sering dijumpai apabila proses installasi selesai, biasanya program akan menanyakan apakah user akan me-Reboot ulang agar efek dari proses installasi dapat langsung nampak atau tidak?.

Yang perlu diingat adalah, dengan API setiap pendeklarasian fungsi selalu diletakkan pada level Module. Kali ini fungsi yang digunakan untuk shutdown window adalah ExitWindowsEx() terletak pada library User32.lib

Fungsi ini akan mengembalikan nilai bertipe Long. Yang mana nilainya 0 jika terjadi kegagalan dan 0 jika fungsi ini berhasil dijalankan. Parameter yang digunakan:

uFlags, Menentukan tipe dari shutdown, nilai yang dapat diberikan antara lain:

  • EWX_LOGOFF, Menghentikan seluruh proses yang berada pada konteks security dan keluar dari user yang sedang berjalan.
  • EWX_SHUTDOWN, Menghentikan seluruh proses dengan menyimpan seluruh sisa data yang masih berada di memori.
  • EWX_REBOOT, Shutdown window dan restart sistem.
  • EWX_FORCE, shutdown window tanpa menyimpan data yang masih ada dimemori. Kemungkinan terburuk adalah kehilangan data, jadi…berhati-hatilal dengan Flag ini. Gunakan apabila memang benar-benar dibutuhkan.
  • EWX_POWEROFF, shutdown sistem dan mematikan power, Flag ini berjalan jika sistem mendukung power-off.

dwReserved, Parameter cadangan (abaikan saja).

Public Declare Function ExitWindowsEx Lib "user32" _
  (ByVal uFlags As Long, _
  ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const EWX_POWEROFF = 8

Setelah mendeklarasikan fungsi ExitWindowsEx(), maka cara penggunaannya yaitu terlihat pada potongan program dibawah. Yaitu dengan memanfaatkan even Click dari Command Control yang ada pada Form.

Private Sub cmdBatal_Click()
    Unload Me
End Sub

Private Sub cmdOk_Click()
  Dim x As Long
  Dim nFlag as Long

  ' opXXX adalah OptionBox Control

  If opLogOff.Value = True Then
    nFlag = EWX_LOGOFF
  ElseIf opShutdown.Value = True Then
    nFlag = EWX_SHUTDOWN
  ElseIf opReboot.Value = True Then
    nFlag = EWX_REBOOT
  ElseIf opForce.Value = True Then
    nFlag = EWX_FORCE
  ElseIf opPowerOff.Value = True Then
    nFlag = EWX_POWEROFF
  End If
  x = ExitWindowsEx( nFlag, 0)


  ' Cek Jika terjadi kegagalan
  If x = 0 Then
    MsgBox "Shutdown tidak dapat dilanjutkan...!", _
      vbOKOnly + vbExclamation
  End If
End Sub

Topmost Windows: Meletakan Windows agar selalu diatas window yang lain Sat - Jun 17, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Program ini digunakan untuk meletakan Window yang diinginkan agar selalu berada di atas window lain (Always on Top), sekalipun window yang bersangkutan sedang tidak berstatus Active. Contoh Program yang menggunakan fasilitas ini adalah Player MP3, WinAmp.

Untuk hal ini digunakan API (Application Program Interface) dengan mendeklarasikannya pada level Module. yaitu dengan memanfaatkan Fungsi SetWindowPos() yang berada pada file pustaka (Library) User32.dll.

Fungsi ini akan mengembalikan nilai bertipe Long. Yang mana nilainya 0 jika terjadi kegagalan dan 0 jika fungsi ini berhasil dijalankan. Parameter yang digunakan:

  • hWnd, Handle dari window yang ingin di set.
  • hWndInsertAfter, Identifikasi dari posisi window. HWND_TOPMOST jika ingin Form selalu berada diatas.
  • x; y, Posisi window dari kiri dan atas layar (dalam pixel).
  • cx; cy, Lebar dan tinggi window (dalam satuan pixel).
  • wFlags, Flag untuk menentukan ukuran dan posisi window. Diantaranya SWP_NOMOVE (&H2) yang akan mengabaikan nilai dari x dan y. SWP_NOSIZE (&H1) yang akan mengabaikan nilai dari cx dan cy.
Public Declare Function SetWindowPos Lib "user32" _
  (ByVal hWnd As Long, _
  ByVal hWndInsertAfter As Long, _
  ByVal X As Long, _
  ByVal Y As Long, _
  ByVal cx As Long, _
  ByVal cy As Long, _
  ByVal wFlags As Long) As Long

' Deklarasi Konstanta untuk keperluan Argument yang akan di
' diberikan pada fungsi SetWindowPos()

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1

Sub Main()
Dim hWnd As Long
  hWnd = SetWindowPos(frmOnTop.hWnd, HWND_TOPMOST, 0, 0, 0, 0, _
    SWP_NOSIZE Or SWP_NOMOVE)
  ' Cek apakah Fungsi yang dijalankan berhasil?
  If hWnd = 0 Then
    MsgBox "Setting Window gagal!", vbCritical, "Gagal"
  Else
    frmOnTop.Show
  End If

End Sub