Sunday, 10 January 2016

https://msdn.microsoft.com/en-us/library/windows/desktop/ff381399%28v=vs.85%29.aspx

Introduction to Windows Programming in C++

Untuk menulis program Windows di C atau C ++, Anda harus menginstal Microsoft Windows Software Development Kit (SDK) atau lingkungan pengembangan yang mencakup Windows SDK, seperti Microsoft Visual C ++. Windows SDK berisi header dan perpustakaan yang diperlukan untuk mengkompilasi dan link aplikasi Anda. Windows SDK juga berisi alat baris perintah untuk membangun aplikasi Windows, termasuk C ++ Visual compiler dan linker. Meskipun Anda dapat mengkompilasi dan membangun program Windows dengan alat baris perintah, kami sarankan menggunakan lingkungan pengembangan fitur lengkap seperti Microsoft Visual Studio. Visual C ++ Express adalah edisi download gratis Visual C ++ yang tersedia di http://go.microsoft.com/fwlink/?LinkId=181514.

Windows Coding Conventions

Jika Anda baru dalam pemrograman Windows, itu dapat membingungkan ketika Anda pertama kali melihat program Windows. Kode ini diisi dengan jenis definisi aneh seperti DWORD_PTR dan LPRECT, dan variabel memiliki nama seperti hWnd dan pwsz (disebut notasi Hungaria). Ini perlu mengambil waktu untuk mempelajari beberapa coding konvensi Windows.

Sebagian besar Windows API terdiri dari baik fungsi maupun Component Object Model (COM) interface. Sangat sedikit Windows API disediakan sebagai kelas C ++. (Sebuah pengecualian adalah GDI +, salah satu dari 2-D grafis API.)



Typedefs

Header Windows mengandung banyak typedef. Banyak dari ini didefinisikan dalam file header WinDef.h. Berikut adalah beberapa yang akan Anda sering temui.

Data typeSizeSigned?
BYTE8 bits Unsigned
DWORD32 bitsUnsigned
INT3232 bitsSigned
INT6464 bitsSigned
LONG32 bitsSigned
LONGLONG64 bitsSigned
UINT3232 bitsUnsigned
UINT6464 bitsUnsigned
ULONG32 bitsUnsigned
ULONGLONG64 bitsUnsigned
WORD16 bitsUnsigned

Seperti yang Anda lihat, ada sejumlah redundansi dalam typedef ini. Beberapa tumpang tindih ini hanya karena sejarah API Windows. Jenis yang tercantum di sini telah tetap ukuran, dan ukuran yang sama di kedua 32-bit dan 64-aplikasi. Sebagai contoh, jenis DWORD selalu 32 bit lebar.

Boolean Type

Bool adalah typedef untuk nilai integer yang digunakan dalam konteks Boolean. File header WinDef.h juga mendefinisikan dua nilai untuk digunakan dengan Bool.
#define FALSE    0 
#define TRUE     1 

Meskipun definisi ini TRUE, bagaimanapun, sebagian besar fungsi yang mengembalikan tipe Bool dapat mengembalikan nilai bukan nol apapun untuk menunjukkan kebenaran Boolean. Oleh karena itu, Anda harus selalu menulis ini:
// Right way.
BOOL result = SomeFunctionThatReturnsBoolean();
if (result) 
{ 
    ...
}
 
dan tidak ini:
// Wrong!
if (result == TRUE) 
{
    ... 
} 
Sadarilah bahwa Bool adalah tipe integer dan tidak dipertukarkan dengan C ++ tipe bool.

Pointer Types

Windows mendefinisikan banyak jenis data berupa pointer-ke-X. Ini biasanya memiliki P awalan maupun LP dalam nama. Misalnya, LPRECT adalah pointer ke rect, di mana rect adalah struktur yang menggambarkan persegi panjang. Deklarasi variabel berikut adalah setara.

RECT*  rect;  // Pointer to a RECT structure.
LPRECT rect;  // The same
PRECT  rect;  // Also the same.
 
Secara historis, P singkatan dari "pointer" dan LP singkatan dari "pointer long". Pointer panjang (juga disebut pointer jauh) adalah peninggalan dari Windows 16-bit, ketika mereka dibutuhkan untuk mengatasi memori berkisar luar segmen saat ini. Awalan LP dipelihara untuk membuatnya lebih mudah untuk port kode 16-bit dengan 32-bit Windows. Hari ini tidak ada perbedaan - pointer adalah pointer.
 

Pointer Precision Types

Jenis data berikut selalu ukuran pointer - yaitu, 32 bit lebar dalam aplikasi 32-bit, dan 64 bit lebar dalam aplikasi 64-bit. Ukuran ditentukan pada waktu kompilasi. Ketika aplikasi 32-bit berjalan pada 64-bit Windows, tipe data ini masih 4 byte lebar. (Sebuah aplikasi 64-bit tidak bisa berjalan di 32-bit Windows, sehingga situasi sebaliknya tidak terjadi.)
  • DWORD_PTR
  • INT_PTR
  • LONG_PTR
  • ULONG_PTR
  • UINT_PTR
Jenis ini digunakan dalam situasi di mana integer mungkin akan dilemparkan ke pointer. Mereka juga digunakan untuk mendefinisikan variabel untuk pointer aritmatika dan untuk menentukan lingkaran counter yang iterate atas berbagai byte dalam buffer memori. Lebih umum, mereka muncul di tempat-tempat yang ada nilai 32-bit diperluas ke 64 bit pada 64-bit Windows.

Hungarian Notation

Notasi Hungaria adalah praktek menambahkan prefiks ke nama-nama variabel, untuk memberikan informasi tambahan tentang variabel. (Notasi penemu, Charles Simonyi, adalah Hungaria, maka namanya).

Dalam bentuk aslinya, notasi orang Hungaria memberikan informasi semantik tentang variabel, mengatakan tujuan penggunaan. Sebagai contoh, i berarti indeks, cb berarti ukuran dalam bytes ("count byte"), dan rw dan col berarti nomor baris dan kolom. Prefiks ini dirancang untuk menghindari penggunaan disengaja dari variabel dalam konteks yang salah. Misalnya, jika Anda melihat ekspresi reposisi + cbTable, Anda akan tahu bahwa nomor baris yang ditambahkan ke ukuran, yang hampir pasti bug dalam kode
Sebuah bentuk yang lebih umum notasi orang Hungaria menggunakan prefiks untuk memberikan informasi jenis - misalnya, dw untuk DWORD dan w untuk WORD.

Jika Anda mencari Web untuk "notasi orang Hungaria," Anda akan menemukan banyak pendapat tentang apakah notasi Hungaria adalah baik atau buruk. Beberapa programmer memiliki intens tidak suka untuk notasi orang Hungaria. Lainnya merasa terbantu. Apapun, banyak contoh kode di MSDN menggunakan notasi orang Hungaria, tetapi Anda tidak perlu menghafal prefiks untuk memahami kode.

Working with Strings

Windows secara native mendukung Unicode string untuk elemen UI, nama file, dan sebagainya. Unicode adalah pengkodean karakter yang disukai, karena mendukung semua set karakter dan bahasa. Windows mencerminkan karakter Unicode menggunakan UTF-16 encoding, di mana masing-masing karakter dikodekan sebagai nilai 16-bit. UTF-16 karakter yang disebut karakter lebar, untuk membedakan mereka dari 8-bit karakter ANSI. Visual C ++ compiler mendukung wchar_t built-in tipe data untuk karakter lebar. File header WinNT.h juga mendefinisikan typedef berikut.

typedef wchar_t WCHAR;

Anda akan melihat kedua versi di MSDN kode contoh. Untuk menyatakan lebar-karakter literal maupun string lebar karakter literal, menempatkan L sebelum literal. 

wchar_t a = L'a';
wchar_t *str = L"hello";
 
Berikut adalah beberapa typedef-string terkait lainnya yang akan Anda lihat:
TypedefDefinition
CHARchar
PSTR or LPSTRchar*
PCSTR or LPCSTRconst char*
PWSTR or LPWSTRwchar_t*
PCWSTR or LPCWSTRconst wchar_t*
 

Unicode and ANSI Functions

Ketika Microsoft memperkenalkan dukungan Unicode untuk Windows, itu memudahkan transisi dengan menyediakan dua set paralel API, satu untuk ANSI string dan yang lainnya untuk Unicode string. Sebagai contoh, ada dua fungsi untuk mengatur teks judul bar jendela:

  • SetWindowTextA takes an ANSI string.
  • SetWindowTextW takes a Unicode string.
#ifdef UNICODE
#define SetWindowText  SetWindowTextW
#else
#define SetWindowText  SetWindowTextA
#endif 
 
Di MSDN, fungsi ini didokumentasikan dengan nama SetWindowText, meskipun itu benar-benar nama makro, bukan nama fungsi sebenarnya.
Aplikasi baru harus selalu memanggil versi Unicode. Banyak bahasa dunia membutuhkan Unicode. Jika Anda menggunakan ANSI string, maka akan mustahil untuk melokalisasi aplikasi Anda. ANSI versi juga kurang efisien, karena sistem operasi harus mengubah string ANSI ke Unicode pada waktu berjalan. Tergantung pada preferensi Anda, Anda dapat memanggil fungsi Unicode secara eksplisit, seperti SetWindowText, atau gunakan macro. Contoh kode di MSDN biasanya memanggil macro, tetapi dua bentuk yang persis sama. Kebanyakan API baru pada Windows hanya memiliki versi Unicode, dengan tidak ada versi ANSI sesuai.
 

TCHARs

Kembali ketika aplikasi yang dibutuhkan untuk mendukung Windows NT serta Windows 95, Windows 98, dan Windows Me, itu berguna untuk mengkompilasi kode yang sama baik untuk ANSI maupun Unicode string, tergantung pada platform target. Untuk tujuan ini, Windows SDK menyediakan macro yang memetakan string Unicode ke maupun ANSI, tergantung pada platform.

Sebagai contoh, kode berikut:

SetWindowText(TEXT("My Application"));
 
resolve ke salah satu dari berikut: 
SetWindowTextW(L"My Application"); // Unicode function with wide-character string.

SetWindowTextA("My Application");  // ANSI function. 
  
TEXT dan CHAR macro kurang berguna hari ini, karena semua aplikasi harus menggunakan Unicode. Namun, Anda mungkin melihat mereka dalam kode yang lebih tua dan dalam beberapa contoh kode MSDN.

Header untuk Microsoft C run-time perpustakaan mendefinisikan satu set sama macro. Misalnya, _tcslen resolve ke strlen jika _UNICODE tidak terdefinisi; selain itu itu resolve ke wcslen, yang merupakan versi lebar-karakter strlen.
 
#ifdef _UNICODE
#define _tcslen     wcslen
#else
#define _tcslen     strlen
#endif 
 
Hati-hati: Beberapa header menggunakan simbol preprocessor UNICODE, yang lain menggunakan _UNICODE dengan LP garis bawah. Selalu mendefinisikan kedua simbol. Visual C ++ menetapkan mereka berdua secara default ketika Anda membuat proyek baru.
 

What Is a Window?

Jelas sekali, jendela adalah pusat untuk Windows. Mereka begitu penting bahwa mereka bernama sistem operasi setelah mereka. Tapi apa jendela? Ketika Anda memikirkan jendela, Anda mungkin memikirkan sesuatu seperti ini:
 
Screen shot of an application window

Screenshot dari sebuah jendela aplikasi
 
Jendela aplikasi memiliki jendela dialog, dan jendela dialog adalah induk dari kedua window tombol. Diagram berikut menunjukkan hubungan ini:
 
Illustration showing parent/child and owner/owned relations 

Window Handles

Windows adalah objek - mereka memiliki kedua kode dan data - tetapi mereka bukan C ++ kelas. Sebaliknya, program merujuk jendela dengan menggunakan nilai yang disebut handle. Sebuah handle adalah jenis buram. Pada dasarnya, handle hanya angka yang menggunakan sistem operasi untuk mengidentifikasi obyek. Anda dapat membayangkan Windows sebagai memiliki tabel besar dari semua windows yang telah dibuat. Menggunakan tabel ini untuk mencari jendela dengan menangani mereka. (Apakah itulah cara kerjanya secara internal tidak penting.) Tipe data untuk jendela menangani adalah HWND, yang biasanya diucapkan "aitch-angin." Jendela menangani dikembalikan oleh fungsi yang membuat jendela: CreateWindow dan CreateWindowEx.

Untuk melakukan operasi pada jendela, Anda biasanya akan memanggil beberapa fungsi yang mengambil nilai HWND sebagai parameter. Misalnya, untuk memposisikan jendela pada layar, memanggil fungsi MoveWindow:

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

Parameter pertama adalah handle ke jendela yang ingin Anda pindah. Parameter lain menentukan lokasi baru jendela dan apakah jendela harus digambar ulang.'
 
Perlu diingat bahwa menangani tidak pointer. Jika hwnd adalah variabel yang berisi handle, mencoba untuk dereference pegangan dengan menulis * hwnd adalah kesalahan.
 

Layar dan Jendela Koordinat

Koordinat diukur dalam pixel perangkat-independen. Kami akan memiliki lebih banyak berbicara tentang perangkat bagian independen dari piksel perangkat-independen ketika kita membahas grafis.
 
Tergantung pada tugas Anda, Anda mungkin mengukur koordinat relatif terhadap layar, relatif terhadap jendela (termasuk frame), atau relatif ke area klien jendela. Misalnya, Anda akan memposisikan jendela pada layar menggunakan koordinat layar, tetapi Anda akan menarik dalam jendela menggunakan koordinat klien. Dalam setiap kasus, origin (0, 0) selalu sudut kiri atas wilayah tersebut.
 
Illustration showing screen, window, and client coordinates  
Ilustrasi menunjukkan koordinat layar, jendela, dan klien
 
 

WinMain: The Entry Point Aplikasi 


Setiap program Windows mencakup fungsi entry-titik yang diberi nama baik WinMain atau wWinMain. Berikut adalah tanda untuk WinMain.
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);

  • HINSTANCE adalah sesuatu yang disebut "handle ke sebuah contoh" maupun "handle untuk modul." Sistem operasi menggunakan nilai ini untuk mengidentifikasi executable (EXE) bila dimuat dalam memori. Contoh handle diperlukan untuk fungsi Windows tertentu - misalnya, untuk memuat ikon atau bitmap.
  •  hPrevInstance tidak memiliki makna. Itu digunakan di 16-bit Windows, tetapi sekarang selalu nol.
  •  pCmdLine berisi argumen baris perintah sebagai string Unicode.
  •  nCmdShow adalah bendera yang mengatakan apakah jendela aplikasi utama akan diminimalkan, dimaksimalkan, maupun ditampilkan secara normal.
Fungsi mengembalikan nilai int. Kemudian kembali nilai tidak digunakan oleh sistem operasi, tetapi Anda dapat menggunakan nilai kembali untuk menyampaikan kode status ke program lain yang Anda tulis.
 
WINAPI adalah konvensi pemanggilan. Sebuah konvensi memanggil mendefinisikan bagaimana fungsi menerima parameter dari penelepon. Sebagai contoh, mendefinisikan agar parameter muncul di stack. Hanya pastikan untuk menyatakan fungsi wWinMain Anda seperti yang ditunjukkan.
 
Fungsi winmain identik dengan wWinMain, kecuali argumen baris perintah yang lulus sebagai string ANSI. Versi Unicode lebih disukai. Anda dapat menggunakan fungsi ANSI winmain bahkan jika Anda mengkompilasi program Anda sebagai Unicode. Untuk mendapatkan salinan Unicode argumen baris perintah, memanggil fungsi GetCommandLine. Fungsi ini mengembalikan semua argumen dalam string tunggal. Jika Anda ingin argumen sebagai array argv-gaya, lulus string ini ke CommandLineToArgvW.
 
Bagaimana compiler tahu memanggil wWinMain bukannya fungsi utama standar? Apa yang sebenarnya terjadi adalah bahwa runtime library Microsoft C (CRT) menyediakan implementasi dari utama yang memanggil baik WinMain atau wWinMain.
 
Berikut adalah fungsi winmain kosong.

INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, INT nCmdShow)
{
    return 0;
}
 
Sekarang bahwa Anda memiliki entry point dan mengerti beberapa terminologi dasar dan coding konvensi, Anda siap untuk membuat program Window lengkap.

Module 1. Your First Windows Program

Dalam modul ini, kita akan menulis sebuah program Windows minimal. Semua hal ini adalah membuat dan menampilkan jendela kosong. Program pertama ini mengandung sekitar 50 baris kode, tidak menghitung baris kosong dan komentar. Ini akan menjadi titik awal kita; kemudian kami akan menambahkan gambar, teks, input pengguna, dan fitur lainnya.
 
Screen shot of the example program 
 
Here is the complete code for the program:

 
 

Integer types

 




Saturday, 9 January 2016

Kak apa sih ping itu?

PING adalah metode yang digunakan orang atau network administrator untuk mengecek/memeriksa/memastikan keberadaan/status (down/up) suatu perangkat/elemen jaringan (PC host, Switch, Printer, Router, Wireless Access Point, PC Server) dari suatu PC atau Switch atau Router atau Wireless Access Point atau PC server.

Result dari proses PING adalah bukan hanya cuma keberadaan/status suatu perangkat/elemen jaringan saja yang dapat diketahui tapi juga berapa durasi atau berapa lama waktu kirim-balas dari PC pelaku-ping (initiator) yang ntah dimana keberadaannya / lokasinya dan PC target-ping yang ntah dimana berada.

Jadi kalau kamu misal sebagai network admin mau nge-PING suatu elemen jaringan: yang pertama dilakukan adalah mencari tahu berapa alamat IP elemen jaringan tersebut dari teman, sanak-saudara, adek, kakak. Misalnya, alamat IP elemen jaringan tersebut adalah: 192.168.1.1 ketik di cmd windows, kayak begini:
PING 192.168.1.1

Gitu.

PING bisa digunakan untuk kebaikan dan kejahatan. PING digunakan untuk kebaikan biasanya untuk memastikan keberadaan/status (down/up) suatu elemen jaringan. Dan PING untuk kejahatan biasanya digunakan untuk merecognition target kejahatan.

Kayak gitu dech manusia yang sok pinter :D
1. Startup new instance: Create object
2. Call metode or call properties of that object, example:

Reference itu artinya to use something as a source in the writing of something.

Getting - or Creating - an Object

Mendapatkan - atau Membuat - Obyek
Misteri alam semesta yang tampaknya tak ada habisnya. Bagaimana piramida besar dari Mesir diciptakan? Di mana lingkaran tanaman benar-benar datang dari? Berapa banyak menjilat yang dibutuhkan untuk sampai ke pusat Tootsie Roll sebuah Tootsie Pop? Salah satu misteri besar scripting adalah bagaimana referensi objek diciptakan. Apakah kita menggunakan GetObject vs CreateObject? Apa perbedaan antara keduanya? Ada banyak hipotesis sekitarnya ini lainnya, non-scripting, misteri (misalnya, banyak orang berpikir bahwa mereka telah memecahkan misteri Tootsie Pop), tapi hari ini kami benar-benar akan menjelaskan scripting misteri besar, dan kebenaran akan terungkap.


Sebelum kita melangkah lebih jauh, kita harus memperingatkan Anda bahwa, karena ini adalah Sesame Script, Anda mungkin mengharapkan informasi untuk pemula. Namun, artikel khusus ini adalah pertama melihat beberapa konsep yang sedikit lebih maju. Misalnya, sebelum Anda dapat mulai memahami bagaimana untuk membuat referensi objek, Anda perlu memahami apa referensi obyek adalah. Tapi jangan khawatir, kami berbicara tentang itu dalam artikel lain, "Class di Sesi," sehingga Anda dapat pergi membaca artikel yang pertama kemudian datang kembali ke sini untuk grand pembukaan. Jangan khawatir, kita akan tinggal di sini dan menunggu untuk Anda.

Empat Kreator Obyek

Ada empat metode yang tersedia untuk menciptakan referensi objek: CreateObject, GetObject, CreateObject, dan GetObject. Tidak, itu bukan kesalahan. (The Scripting Pria membuat kesalahan Jangan Nah, oke, kadang-kadang -?! Tapi tidak dalam kasus ini.) Itu benar-benar adalah empat metode, dan bukan hanya dua metode diulang. Dua metode ini metode VBScript dan dua adalah Windows Script Host (WSH) metode:


VBScript
CreateObject(servername.typename [, location])
GetObject([pathname] [, class])
WSH
object.CreateObject(strProgID[,strPrefix])
object.GetObject(strPathname [,strProgID], [strPrefix])

Sekarang, Anda bisa bekerja keras melalui VBScript dan WSH Bahasa Referensi dan susah payah mencoba untuk mencari tahu bagaimana menggunakan metode ini. Atau Anda bisa terus membaca dan kami akan menjelaskan semuanya Anda benar-benar perlu tahu untuk membedakan antara semua ini. (Jika Anda masih ingin memahami apa yang terjadi di Referensi Bahasa, baca "Cara Membaca SDK.") 

CreateObject vs GetObject
Kita akan berbicara lebih rinci nanti tentang perbedaan antara VBScript dan versi WSH benda-benda. Untuk saat ini, kita akan fokus pada versi VBScript, karena itulah yang Anda akan menggunakan sebagian besar waktu. Apa yang paling penting di sini adalah untuk memahami perbedaan antara CreateObject dan GetObject, dan mengapa Anda kadang-kadang perlu menggunakan satu dan kadang-kadang yang lain.
Bagian atas halaman
VBScript CreateObject
Anda menggunakan CreateObject ketika Anda ingin membuat contoh baru dari sebuah objek. Sebagai contoh, jika Anda ingin memulai sebuah contoh baru dari Excel, Anda akan membuat sebuah referensi obyek seperti ini:

 
Set objExcel = CreateObject("Excel.Application")



Anda sekarang memiliki referensi obyek ke sebuah contoh dari Excel, dan Anda dapat menggunakan referensi objek untuk memanggil metode dan properti yang akan memanipulasi Excel. Hanya untuk membuktikan itu, berikut adalah script yang menggunakan CreateObject untuk membuat sebuah instance dari Excel, kemudian menggunakan objek yang membuat Excel terlihat di layar dan menambahkan buku kerja baru:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add

Berikut adalah script yang menciptakan dua contoh yang terpisah dari Excel:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add

Set objExcel2 = CreateObject("Excel.Application")
objExcel2.Visible = True
Set objWorkbook = objExcel2.Workbooks.Add 
 
Jalankan script ini dan Anda akan melihat dua contoh Excel terbuka pada desktop Anda. Anda dapat mengontrol masing-masing secara terpisah dalam naskah Anda berdasarkan variabel yang kita digunakan untuk menyimpan objek referensi: objExcel dan objExcel 2.
VBScript GetObject

Sekarang kita tahu bahwa kita dapat membuat obyek dengan memanggil CreateObject, mengapa kita perlu menggunakan GetObject? Bisakah kita menggunakannya di tempat CreateObject?

Set objExcel = GetObject("Excel.Application")
objExcel.Visible = True
 
Jika Anda mencoba menjalankan script ini, Anda akan menemukan bahwa jawabannya tidak, Anda tidak bisa hanya menggunakan GetObject di tempat CreateObject. Anda akan tahu ini adalah jawabannya ketika Anda menerima kesalahan "sintaks tidak valid." Itu petunjuk yang cukup baik.

Tujuan dari GetObject adalah untuk mengambil referensi ke objek yang sudah berjalan. Jadi Anda mungkin berpikir bahwa jika Anda dapat membuat referensi obyek ke Excel dengan menelepon CreateObject maka Anda dapat membuat referensi obyek lain untuk bahwa contoh yang sama dari Excel dengan memanggil GetObject, seperti ini:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add

Set objExcel2 = GetObject("Excel.Application") 
 
Nah, hampir. Kode yang tidak bekerja, tetapi Anda akan menemukan bahwa ini tidak:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add

Set objExcel2 = GetObject(, "Excel.Application")
Set objWorkbook = objExcel2.Workbooks(1)
Set objWorksheet = objWorkbook.Worksheets(1)
objExcel2.Cells(1, 1).Value = 11

Anda akan melihat bahwa kami melewatkan parameter pertama dan hanya digunakan parameter kedua untuk merujuk Excel.Application. Selain itu, masih tampaknya bekerja banyak seperti CreateObject, dan sama seperti kita harapkan. Jadi apa masalahnya? Sebenarnya, ada beberapa masalah. Sebagai permulaan, kita tidak bisa datang dengan alasan yang baik mengapa Anda akan melakukan hal ini. Anda sudah memiliki referensi obyek ke Excel, mengapa Anda membutuhkan satu sama lain? Dan bahkan jika Anda tidak ingin lagi, daripada menggunakan GetObject Anda dapat hanya melakukan ini:

Set objExcel2 = objExcel
 
Sekarang Anda memiliki dua variabel yang referensi objek yang sama, dan Anda tidak perlu memanggil metode sama sekali. Dan, benar-benar, pilihan kedua ini lebih baik pula karena setidaknya Anda tahu mana contoh Excel yang akan Anda mendapatkan. Misalkan Anda memiliki tiga contoh berjalan Excel dan Anda menjalankan script ini:

Set objExcel2 = GetObject(, "Excel.Application")
Set objWorkbook = objExcel2.Workbooks(1)
Set objWorksheet = objWorkbook.Worksheets(1)
objExcel2.Cells(1, 1).Value = 11 
 
Manakah contoh Excel yang telah kamu ubah? Tidak ada cara untuk mengetahuinya.

Jadi mari kita membuat hidup kita sederhana, menghindari banyak sakit kepala, dan mengatakan bahwa, dalam semua kecuali kasus yang paling ekstrim, menggunakan CreateObject untuk membuat referensi objek. Kecuali…

Ya, selalu ada pengecualian. Pengecualian utama adalah Windows Management Instrumentation (WMI) dan antarmuka layanan direktori aktif (ADSI). Kami akan fokus pada WMI sini, tetapi segala sesuatu yang kita katakan juga benar dari ADSI.

Perbedaan utama antara cara WMI bekerja dan cara aplikasi seperti Excel bekerja adalah bahwa WMI selalu berjalan. Bahkan jika Anda menghentikan layanan WMI, segera setelah Anda mencoba untuk mengaksesnya, maka secara otomatis akan mulai lagi. Jadi jika komputer aktif, objek WMI tersedia. Untuk itu, Anda tidak perlu membuat objek, mereka sudah ada. Anda hanya harus mendapatkan mereka - dengan GetObject.

Berikut contoh penggunaan GetObject untuk mengambil referensi ke objek WMI:
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Parameter kami lolos ke GetObject benar-benar terdiri dari tiga bagian: winmgmts (moniker untuk SWbemServices objek, yang merupakan layanan WMI), nama komputer kita mengakses (. Titik mewakili komputer lokal), dan namespace dalam WMI Anda ingin mengakses (dalam hal ini root \ CIMV2). Untuk alasan ini, di sebagian besar script Anda akan melihat panggilan yang dibuat seperti ini:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Memisahkan nama komputer ke dalam variabel memungkinkan Anda untuk dengan mudah mengubah nama komputer Anda mengakses.

Ya, kita tahu, ini semakin membingungkan dari menit ke menit. Layanan WMI, namespace ... apa semua ini? Nah, Anda mungkin tahu apa layanan adalah. Ada layanan Alerter, layanan Event Log, layanan Messenger, dan sebagainya. Dan tentu saja ada juga layanan WMI. Namespaces hanya dari cara mengorganisasikan objek. Kebanyakan WMI objek yang akan Anda gunakan akan di root \ CIMV2 namespace.
Catatan: Untuk melihat ruang nama yang berbeda dan objek yang berbeda terkait dengan mereka, men-download Scriptomatic.

Mengambil Informasi dari Layanan WMI


Sekarang bahwa kita memiliki referensi ke layanan WMI kita bisa query untuk objek tertentu WMI kita cari dengan menelepon baik dengan metode Dapatkan atau metode ExecQuery pada layanan (objek yang SWbemServices). Berikut ini adalah contoh yang menggunakan metode Dapatkan untuk mengembalikan referensi objek ke objek Win32_LogicalDisk dengan Device ID dari C ::

 

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='c:'")
Jika Anda ingin mengambil koleksi benda-benda, atau mengambil benda berdasarkan beberapa kriteria, Anda menggunakan ExecQuery. Berikut ini adalah contoh yang, sekali lagi, menggunakan objek Win32_LogicalDisk, tetapi dalam kasus ini kita ingin semua benda Win32_LogicalDisk:

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colDrives = objWMIService.ExecQuery _
    ("Select * From Win32_LogicalDisk")

For Each objDrive in colDrives
    Wscript.Echo "Drive letter: " & objDrive.DeviceID
    Wscript.Echo "Network path: " & objDrive.ProviderName
Next
 
 
Jika kita telah menggunakan metode Get dalam hal ini daripada ExecQuery, Get mengembalikan drive jaringan pertama ditemui dan mengembalikan referensi objek untuk drive itu. Jika Anda memiliki lebih dari satu drive jaringan Anda tidak memiliki cara untuk mengetahui yang akan dikembalikan. Dengan menggunakan ExecQuery, Anda kembali semuanya. (Untuk membaca rincian tentang bagaimana sisa script ini bekerja, lihat artikel Hei, Scripting Guy! Ini.)

VBScript vs. WSH

Kami tidak akan berbicara banyak tentang perbedaan antara metode VBScript dan metode WSH yang identik-bernama karena seperti yang telah disebutkan, sebagian besar waktu Anda akan menggunakan metode VBScript seperti kami hanya menunjukkan Anda.

Set objExcel = Wscript.CreateObject("Excel.Application")
 
Satu perbedaan yang jelas antara keduanya adalah bahwa jika Anda menggunakan versi WSH baik yang CreateObject atau metode GetObject Anda perlu mendahului nama metode dengan Wscript, seperti ini:

Set objExcel = CreateObject("Excel.Application", "atl-ws-01")
Set objExcel = Wscript.CreateObject("Excel.Application", "Sub")
Anda mungkin telah memperhatikan bahwa segala sesuatu yang lain dalam pernyataan ini tampak persis seperti versi VBScript. Yang mengejutkan adalah bahwa ia bekerja persis sama, juga. Perbedaannya hanya menjadi jelas ketika Anda memutuskan untuk menggunakan parameter kedua:
Contoh pertama menggunakan metode VBScript CreateObject. Parameter kedua menunjuk nama mesin terhadap yang Anda ingin menjalankan script. Contoh kedua adalah versi WSH, dan parameter kedua adalah awalan subrutin. Kami tidak akan pergi ke detail tentang semua ini karena parameter ini tidak selalu berperilaku seperti yang diharapkan, dan Anda akan jarang menggunakannya. Begitu saja kita tidak bisa memikirkan sangat banyak contoh dari ribuan script pada Script Center yang memerlukan penggunaan parameter tambahan ini. (Meskipun Tales dari kolom Script saya akan Get Anda My Cukup .... Dan Kami akan Mengelola Windows Update, Terlalu! Tidak membahas bagaimana Anda dapat menggunakan VBScript parameter kedua untuk mengelola layanan Windows Update pada komputer remote.)
Informasi lebih
WSH - Using COM Objects
VBScript - Connecting to Objects
Eric Lippert’s Blog - What’s the Difference between Wscript.CreateObject, Server.CreateObject, and CreateObject?

Misteri Terpecahkan

Kita tahu bahwa adalah sedikit membingungkan, dan itu semacam versi bertele-tele ini: Gunakan GetObject untuk WMI dan ADSI, pengguna CreateObject untuk hanya tentang segala sesuatu yang lain.
Seperti kebanyakan aturan ada pengecualian, tapi mereka sedikit dan jauh antara. Sekarang mungkin kita akan mulai bekerja pada mereka Tootsie Pops.

   

 https://technet.microsoft.com/library/ee176980.aspx

Friday, 8 January 2016

Kak apa sih regedit itu?

Registy editor adalah alat untuk memodifikasi bagaiamana komputer kamu berjalan

Kalau kamu nginstal sebuah program, maka Window akan mengupdate System Registry.

System Registry terdiri dari folder:
1. HKEY_CLASSES_ROOT
2. HKEY_CURRENT_USER
3. HKEY_LOCAL_MACHINE
4. HKEY_USERS
5. HKEY_CURRENT_CONFIG

Kak apa sih segitiga itu?

Segitiga adalah kombinasi 3 buah sisi yang menghasilkan 3 buah sudut.

Misalnya ada 3 buah sisi a, b dan c. a ketemu b dengan sudut 60 derajat, a ketemu c dengan sudut 30 derajat dan b ketemu c dengan sudut 90 derajat, maka terbentuklah segitiga.

Terminologi ini belum lengkap nanti ku lengkapi lagi.

Kak apa sih matriks itu?

Matriks itu adalah sekumpulan angka/data.

Suatu/sebuah matriks itu bisa diapain aja sih?
1. Suatu Matriks itu bisa di transpose
2. Suatu Matriks itu bisa di inverse
3. Suatu Matriks itu bisa dicari determinannya.
Determinan itu digunakan untuk mencari apakah suatu/sebuah Matriks mempunyai inverse atau tidak mempunyai inverse.

Kak tentang apa sih VBScript itu?

VBScript itu seputar sendkeys
1. Build printscreen
2. Features: Save to a folder instead of saving to Microsoft Paint.

Resources:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/07536229-c872-4e43-a0ef-4b5b703c4d5e/sendkeyssendv-does-not-paste-an-image-but-it-does-paste-text?forum=csharpgeneral

Thursday, 7 January 2016

Kak apa aja sih elemen-elemen jaringan komputer alias jaringan TCP/IP?

Elemen-elemen jaringan komputer a.k.a TCP/IP antara lain:
1. Switch
2. Router
3. Wireless Access Point
4. Server
Ada server:
- E-mail
- Web
- Database seperti mySQL
- ASA (Adaptive Security Appliance)
5. Kabel
6. Komputer Personal atau PC baik yang Wi-Fi (Laptop) maupun yang kabel.
7. Telepon IP atau IP Phone

Kak apa itu SOH, CAH, TOA

SOH, CAH, TOA adalah perbandingan / rasio trigonometri.

TOA is just like VOA but not Toice Over America.

Facts:
1. Only SOH and CAH that 
2. Kalau diberitahu 1 sudut dan 1 sisi saja kita bisa mencari besar semua sisi.

Wednesday, 6 January 2016

1. Membedakan yg mana yg parent yg mana children
2. memasukkan index parent ke dalam suatu array
3. memasukkan index kedalam suatu array: jika index dari suatu array yang dimasukkan kedalam suatu array, maka sebutkan user dari array ini kelak
4.

Fakta-fakta tentang

1. Semakin besar nilai dari x, semakin jauh titik atau objek dari garis y (garis sumbu).
2. Semakin besar nilai dari y, semakin jauh titik atau objek dari garis x (garis sumbu).

Sunday, 3 January 2016

How to draw a triangle, star and rectangle with Small Basic

Jika obyek bermasa dijatuhkan dari atas berapakah force yang diciptakan?
gravity intended to attract anything including water
Do it or forget about it

Sometimes you are worried to do a certain thing. This program helps you dealing with complex/urgent situation or to decide something.
1. Are you benefit from this situation?
2.

innocent
tulus
licik
cerdik
What are terorist group in middle east?
Al-Qaeda
Taliban
Boko Haram
Hezbollah
Hizb ut-Tahrir

Friday, 1 January 2016

SyntaxError: unterminated regular expression literal
SyntaxError: missing ] in index expression
SyntaxError: missing } in compound statement
ReferenceError: chidrens is not defined -->Cuma salah ketik atau typo
TypeError: document.getElementById(...) is null

Thursday, 31 December 2015

Kak apa sih for itu?

For
The For statement allows you to execute a set of statements multiple times.
 
Example
The following example will print out numbers from 1 to 10

For i = 1 To 10
  TextWindow.WriteLine(i)
EndFor


Kak apa sih while itu?

The While statement allows you to repeat something until you achieve a desired result.
 

Kak apakah yang disebut array itu?

Array adalah tempat untuk menyimpan nilai-nilai. Ini bahasa inggrisnya:
This object provides a way of storing more than one value for a given name. These values can be accessed by another index.
Router>enable
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#ip nat ?
inside Inside address translation
outside Outside address translation
pool Define pool of addresses
Router(config)#ip nat inside ?
source Source address translation
Router(config)#ip nat inside source ?
list Specify access list describing local addresses
static Specify static local->global mapping
Router(config)#ip nat inside source list ?
<1-199> Access list number for local addresses
WORD Access list name for local addresses
Router(config)#ip nat inside source list 100 ?
interface Specify interface for global address
pool Name pool of global addresses
Router(config)#ip nat inside source list 100 interface ?
Ethernet IEEE 802.3
FastEthernet FastEthernet IEEE 802.3
GigabitEthernet GigabitEthernet IEEE 802.3z
Serial Serial
Router(config)#ip nat inside source list 100 interface fa
Router(config)#ip nat inside source list 100 interface fastEthernet ?
<0-9> FastEthernet interface number
Router(config)#ip nat inside source list 100 interface fastEthernet 0/0 ?
overload Overload an address translation
<cr>
Router(config)#ip nat inside source list 100 interface fastEthernet 0/0 overload
Router(config)#ip nat inside source list 100 interface fastEthernet 0/0
Router(config)#ip nat inside source list 100 interface ?
Ethernet IEEE 802.3
FastEthernet FastEthernet IEEE 802.3
GigabitEthernet GigabitEthernet IEEE 802.3z
Serial Serial
Router(config)#ip nat inside source list 100 ?
interface Specify interface for global address
pool Name pool of global addresses
Router(config)#ip nat inside source list 100 pool ?
WORD Name pool of global addresses
Router(config)#ip nat inside source list 100 pool mypool ?
overload Overload an address translation
<cr>
Router(config)#ip nat inside source list 100 pool mypool overload
Router(config)#ip nat inside source list 100 pool mypool
Router(config)#ip nat inside source ?
list Specify access list describing local addresses
static Specify static local->global mapping
Router(config)#ip nat inside source static
Router(config)#ip nat inside source static ?
A.B.C.D Inside local IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat inside source static 192.168.1.1 ?
A.B.C.D Inside global IP address
Router(config)#ip nat inside source static 192.168.1.1 10.10.10.1 ?
<cr>
Router(config)#ip nat inside source static 192.168.1.1 10.10.10.1
Router(config)#ip nat inside source static ?
A.B.C.D Inside local IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat inside source static tcp
Router(config)#ip nat inside source static tcp ?
A.B.C.D Inside local IP address
Router(config)#ip nat inside source static tcp 192.168.1.1 ?
<1-65535> Local UDP/TCP port
Router(config)#ip nat inside source static tcp 192.168.1.1 80 ?
A.B.C.D Inside global IP address
Router(config)#ip nat inside source static tcp 192.168.1.1 80 10.10.10.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat inside source static tcp 192.168.1.1 80 10.10.10.1 69 ?
<cr>
Router(config)#ip nat inside source static tcp 192.168.1.1 80 10.10.10.1 69
Router(config)#ip nat inside source static ?
A.B.C.D Inside local IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat inside source static tcp ?
A.B.C.D Inside local IP address
Router(config)#ip nat inside source static tcp 192.168.1.2 ?
<1-65535> Local UDP/TCP port
Router(config)#ip nat inside source static tcp 192.168.1.2 80 ?
A.B.C.D Inside global IP address
Router(config)#ip nat inside source static tcp 192.168.1.2 80 10.10.10.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat inside source static tcp 192.168.1.2 80 10.10.10.1 8080 ?
<cr>
Router(config)#ip nat inside source static tcp 192.168.1.2 80 10.10.10.1 8080
Router(config)#ip nat inside source static udp ?
A.B.C.D Inside local IP address
Router(config)#ip nat inside source static udp 192.168.1.2 ?
<1-65535> Local UDP/TCP port
Router(config)#ip nat inside source static udp 192.168.1.2 80 ?
A.B.C.D Inside global IP address
Router(config)#ip nat inside source static udp 192.168.1.2 80 10.10.10.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat inside source static udp 192.168.1.2 80 10.10.10.1 8080 ?
<cr>
Router(config)#ip nat inside source static udp 192.168.1.2 80 10.10.10.1 8080
Router(config)#
Router(config)#
Router(config)#
Router(config)#ip nat inside source ?
list Specify access list describing local addresses
static Specify static local->global mapping
Router(config)#ip nat inside ?
source Source address translation
Router(config)#ip nat ?
inside Inside address translation
outside Outside address translation
pool Define pool of addresses
Router(config)#ip nat outside ?
source Source address translation
Router(config)#ip nat outside source ?
list Specify access list describing local addresses
static Specify static global->local mapping
Router(config)#ip nat outside source list ?
<1-199> Access list number for local addresses
WORD Access list name for local addresses
Router(config)#ip nat outside source list 200 ?
pool Name pool of global addresses
Router(config)#ip nat outside source list 200 pool ?
WORD Name pool of global addresses
Router(config)#ip nat outside source list 200 pool mypool ?
<cr>
Router(config)#ip nat outside source list 200 pool mypool
Router(config)#ip nat outside source ?
list Specify access list describing local addresses
static Specify static global->local mapping
Router(config)#ip nat outside source stat
Router(config)#ip nat outside source static ?
A.B.C.D Outside global IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat outside source static 192.168.1.1 ?
A.B.C.D Outside local IP address
Router(config)#ip nat outside source static 192.168.1.1 10.10.10.1 ?
<cr>
Router(config)#ip nat outside source static 192.168.1.1 10.10.10.1 ?
<cr>
Router(config)#ip nat outside source static 192.168.1.1 10.10.10.1
Router(config)#ip nat outside source static ?
A.B.C.D Outside global IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat outside source static tcp ?
A.B.C.D Outside global IP address
Router(config)#ip nat outside source static tcp 192.168.1.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat outside source static tcp 192.168.1.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat outside source static tcp 192.168.1.1 80 ?
A.B.C.D Outside local IP address
Router(config)#ip nat outside source static tcp 192.168.1.1 80 10.10.10.1 ?
<1-65535> Local UDP/TCP port
Router(config)#ip nat outside source static tcp 192.168.1.1 80 10.10.10.1 8080
Router(config)#ip nat outside ?
source Source address translation
Router(config)#ip nat outside source ?
list Specify access list describing local addresses
static Specify static global->local mapping
Router(config)#ip nat outside source static ?
A.B.C.D Outside global IP address
tcp Transmission Control Protocol
udp User Datagram Protocol
Router(config)#ip nat outside source static udp ?
A.B.C.D Outside global IP address
Router(config)#ip nat outside source static udp 192.168.1.1 ?
<1-65535> Global UDP/TCP port
Router(config)#ip nat outside source static udp 192.168.1.1 192.168.1.1 ?
% Unrecognized command
Router(config)#ip nat outside ?
source Source address translation
Router(config)#ip nat outside source ?
list Specify access list describing local addresses
static Specify static global->local mapping
Router(config)#ip nat outside source
Everlasting good story

Memarahi diri sendiri

Nantilah kau kerjakan itu..
Tidak pakai tanda seru
Tidak memaki

Program that detect mouse left button down or up | Small Basic

The code below simply output a text "Mouse UP" when mouse left button is clicked is up and a text "Mouse Down" when mouse left click is down or clicked.

GraphicsWindow.MouseDown = mousedown
loopz:

If Mouse.IsLeftButtonDown = "False" then
TextWindow.WriteLine("Mouse UP")
endif
Program.Delay(100)
Goto loopz

Sub mousedown
  If Mouse.IsLeftButtonDown = "True" Then
    TextWindow.WriteLine("Mouse DOWN")
  EndIf
EndSub
While x <> 9
  x = Math.GetRandomNumber(10)
  j = j + 1
EndWhile
TextWindow.WriteLine(j)

Wednesday, 30 December 2015

What is bandwidth monitoring?

Bandwidth monitoring create simple reports on bandwidth usage by:
port for traffic sent from your system.
port for traffic routed through your system.

Bandwidth monitoring useful for both stand-alone hosts and gateway.

Before bandwidth monitoring can be used, module must setup firewall rules and a syslog entry.
And after that, you must select the system's external network interface, on which


Tuesday, 29 December 2015

Kongruensi

You eat 1/4 of a pizza that has radius of 2cm.
You eat 1/2 of a dunnot that has radius of 2cm for outer circle and 1cm inner for circle. How big is that you eat?
You drink 3/4 volume a spherical left. How big is that you drink?

Graphic

Graphics helps you explain a function, like:
What is value between two point of interval

Function distinguished into:
- Discrete function, and
- Continuous function

Sunday, 27 December 2015

Kak bagaimana sih cara appand suatu nilai ke suatu array?

Cara gampangnya gini dek:
1. Cari panjang/length array-nya dulu
2. Kemudian x[length+1] = data

Atau kalau mau yang lebih praktis, pakai fungsi built-in javascript push dek.

Pertanyaan pembuka perkenalan sebuah Array

var x = ['Linkin Park', 'Guns n Roses', 'Bee Gees']
1. Sebutkan apa saja index array x ini/diatas? 0, 1, 2
2. Sebutkan index tertinggi dari variabel x ini? 2
2. Sebutkan berapa jumlah elemen variabel array x (jumlah elemen = jumlah index), jawab: 3.
3.Sebutkan apa saja nilai/value-elemen atau nilai-indeks dari array ini? Linkin Park, Guns n Roses, Bee Gees
4. Sebutkan nilai-indeks 1 dari array ini? Guns n Roses

var x = [[],[],[]]

1. Berapa bariskah array tersebut? 3
2. Berapa kolomkah array tersebut? 1
3. Berapakah jumlah elemen tersebut?

var x = [[Minggu],[Sabtu],[Jumat]]
1. Berapa bariskah array tersebut?
2. Berapa kolomkah array tersebut?
3. Berapakah jumlah elemen tersebut?

var x =[['Aarnold','Brad Pitt'],['Maria Shriver','Angelina Jolie']]
1. Berapa bariskah array tersebut? 2 baris
2. Berapa kolomkah array tersebut? 2 kolom
3. Berapakah jumlah elemen array tersebut? 4 buah elemen
4. Bagaimanakah mengakses elemen baris pertama kolom ke-2 dan serta mengoutputkan ke jendela alert?
x[0][1]
5. Bagaimanakah menghitung jumlah elemen array tersebut?
x = x[0].length + x[1].length

var x =['Arnold','Brad Pitt']
var femaleactress = ['Maria Shriver','Angelina Jolie']

var x = [
Biar mudah diingat, mudah diambil.

Saturday, 26 December 2015

1. Gelar/buat form
User mengisi
2. Masukan data masukan ke dalam masing-masing tabel
3.

Friday, 25 December 2015

Mana yang lebih gampang untuk dilakukan?

Terdapat 3 buah objek. Ketiga objek itu mempunyai properti panjang dan lebar. Manakah yang lebih mudah dilakukan mencatat ketiga properti panjang itu kedalam tabel dan ketiga properti panjang itu kedalam tabel lebar, atau, mencatat  sekaligus semuanya kedalam sebuah tabel?

Underestimating paperwork