4 Ocak 2015 Pazar

IsWow64 Function

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL IsWow64()
{
    BOOL bIsWow64 = FALSE;

    //IsWow64Process is not available on all supported versions of Windows.
    //Use GetModuleHandle to get a handle to the DLL that contains the function
    //and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
        GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

    if(NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
            //handle error
        }
    }
    return bIsWow64;
}

int main( void )
{

SYSTEM_INFO sys;
GetSystemInfo(&sys);
DWORD sysar=sys.wProcessorArchitecture;
#if defined _WIN64
        if(IsWow64())
        _tprintf(TEXT("The process is running under WOW64.\n")); //process 64 and PC 32 --->BOYLE BIR IHTIMAL YOK(CALISMAZ)
        else
{
        _tprintf(TEXT("64 bit process under 64 bit PC \n")); //process 64 and PC 64
system("start C:\\Example64Bit"); //64 bit programı çalıştır
}
#elif defined _WIN32
    if(IsWow64())
{
            _tprintf(TEXT("32 bit process under 64 bit PC.\n")); //program 32, win64
   system("start C:\\Example64Bit");//64 bit programı çalıştır
}
else
{
_tprintf(TEXT("32 bit process under 32 bit PC \n")); //program 32, win32
    system("start C:\\32BitExample"); //32 bit programı çalıştır
}
#endif
    return 0;
}

3 Ocak 2015 Cumartesi

VSc++ Setup


#include <windows.h>
#include <strsafe.h>

typedef void( WINAPI *SYSINF )( LPSYSTEM_INFO );
#define BUFFERSIZE 260

int main()
{
SYSTEM_INFO sysInfo;
WIN32_FIND_DATA ffd;
HANDLE hFind;
HINSTANCE hInstance;
SYSINF sysINF;
TCHAR myPath[MAX_PATH];
TCHAR EXE[MAX_PATH] = L"setup.exe";
TCHAR MSI[MAX_PATH] = L"setup.msi";
TCHAR *cpuArch, *subDir, *MsgError;

#ifdef _DEBUG
wprintf( L"Checking System Architecture... : " );
#endif

hInstance = LoadLibrary( L"kernel32.dll" );

if ( hInstance != NULL )                  // loading DLL failed
sysINF = ( SYSINF ) GetProcAddress( hInstance , "GetNativeSystemInfo" );

if ( NULL != sysINF )
sysINF( &sysInfo );                        // found, use this DLL function
else
GetSystemInfo( &sysInfo );

switch ( sysInfo.wProcessorArchitecture ) {
case PROCESSOR_ARCHITECTURE_INTEL:
{ cpuArch = L"32-Bit"; subDir = L"x86"; };

break;
case PROCESSOR_ARCHITECTURE_AMD64:
{ cpuArch = L"64-Bit"; subDir = L"x64"; };

break;
}

#ifdef _DEBUG
wprintf( L"%s System\n", cpuArch );
#endif

GetCurrentDirectory( MAX_PATH, myPath );
StringCchCat( myPath, BUFFERSIZE, L"\\" );
StringCchCat( myPath, BUFFERSIZE, subDir );

hFind = FindFirstFile( myPath, &ffd );

if ( hFind != INVALID_HANDLE_VALUE ) {
FindClose( hFind );
SetCurrentDirectory( myPath );
#ifdef _DEBUG
wprintf( L"Looking for installation program in \"%s\" sub-directory...\n", subDir );
#endif
}
else {
wprintf( L"ERROR (%d): Installation sub-directory not found!..\n", GetLastError() );
exit( EXIT_FAILURE );
}

GetCurrentDirectory( MAX_PATH, myPath );

hFind = FindFirstFile( EXE, &ffd );

if ( hFind == INVALID_HANDLE_VALUE )
hFind = FindFirstFile( MSI, &ffd );

if ( hFind == INVALID_HANDLE_VALUE ) {
wprintf( L"ERROR (%d) : Installation program not found!..\n", GetLastError() );
return 3;
}

#ifdef _DEBUG
wprintf( L"Found \"%s\". Starting installation...\n", ffd.cFileName );
#endif
hInstance = ShellExecute( NULL, L"open", ffd.cFileName, NULL, myPath, SW_HIDE );

if ( ( int ) hInstance < 32 ) {
switch ( ( int ) hInstance ) {
case 0                      :
MsgError = L"Insufficient Memory/Resources";
break;

case ERROR_FILE_NOT_FOUND   :
MsgError = L"File not found";
break;

case ERROR_PATH_NOT_FOUND   :
MsgError = L"Path not found";
break;

case ERROR_BAD_FORMAT       :
MsgError = L"Invalid file format";
break;

case SE_ERR_ACCESSDENIED    :
MsgError = L"Access denied";
break;

case SE_ERR_ASSOCINCOMPLETE :
MsgError = L"Invalid file association";
break;

case SE_ERR_DDEBUSY         :
MsgError = L"DDE transaction not completed";
break;

case SE_ERR_DDEFAIL         :
MsgError = L"DDE transaction failed";
break;

case SE_ERR_DDETIMEOUT      :
MsgError = L"DDE transaction timed out";
break;

case SE_ERR_DLLNOTFOUND     :
MsgError = L"Specified DLL not found";
break;

case SE_ERR_NOASSOC         :
MsgError = L"No application associated";
break;

case SE_ERR_OOM             :
MsgError = L"Not enough memory";
break;

case SE_ERR_SHARE           :
MsgError = L"Sharing violation";
break;
}

wprintf( L"ERROR (%d): %s!..\n", GetLastError(), MsgError );
}
else
wprintf( L"Succeeded. Exiting!..." );

return 0;
}

VSc++ Computer shut-reboot-powerOff

/****************************************************************************
 * Program Name : Computer Power Options
 * Program Ver. : v1.0.0.0
 * Module Name  : ShutDown.exe
 * Last Edition : 20.03.2013
 * Optimization : No code analysis issues were detected.
 ****************************************************************************/
#include <Windows.h>
#include <strsafe.h>

#define BUF_SIZE 260

int wmain( int argc, TCHAR *argv[] )
{
TCHAR param[MAX_PATH] = L"";
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD op;

if ( argc == 2 )
StringCchCat( param, BUF_SIZE, argv[1] );
else {
wprintf( L"\nKullanim :\n\tShutDown <parametre>" );
wprintf( L"\nKullanilabilir parametre degerleri:" );
wprintf( L"\n\tlogoff   : Oturumunuzu sona erdirir." );
wprintf( L"\n\tshutdown : Bilgisayari kapatir." );
wprintf( L"\n\treboot   : Bilgisayari yeniden baslatir." );
wprintf( L"\n\tpoweroff : Bilgisayari kapatip gucu keser." );
return 1;
}

if ( ! lstrcmp( param, L"logoff"   ) )
op = EWX_LOGOFF;
else if ( ! lstrcmp( param, L"shutdown" ) )
op = EWX_SHUTDOWN;
else if ( ! lstrcmp( param, L"reboot"   ) )
op = EWX_REBOOT;
else if ( ! lstrcmp( param, L"poweroff" ) )
op = EWX_POWEROFF;
else
op = 999;

op = op | EWX_FORCE;

// Get a token for this process.
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken
  )
  )
return 1;

// Get the LUID for the shutdown privilege.
LookupPrivilegeValue( NULL, // Name of the system
 SE_SHUTDOWN_NAME, // Name of the privilege
 &tkp.Privileges[0].Luid // Locally unique identifier
);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.
AdjustTokenPrivileges( hToken,
  FALSE,
  &tkp,
  0,
  ( PTOKEN_PRIVILEGES ) NULL,
  0
);

if ( GetLastError() != ERROR_SUCCESS )
return 1;

ExitWindowsEx( op, 0 );

return 0;
}

VSc++ Load Library



#include <windows.h>
#include <strsafe.h>              // for StringCchPrintf function

/*************************************************************************
 * Global type and variable definitions
 ************************************************************************/
// Define a new type in the same structure of GetSystemInfo API function
typedef VOID ( WINAPI *SYSINF )( LPSYSTEM_INFO );
// Specify the maximum size of buffer
#define BUF_SIZE 256
//----End of Type Definitions --------------------------------------------

/*************************************************************************
 * Error handling function which display error in a MessageBox
 ************************************************************************/
void ShowError( TCHAR *errFunc )
{
TCHAR    Message[BUF_SIZE] = L"";  // Message will be displayed
TCHAR    *msgStatic;               // Static Error string
LPCTSTR  fmtString;                // Error string structure
LPVOID   msgBuffer;                // Temporary buffer for error description
DWORD    errNo;                    // Last System Error Number

errNo    = GetLastError();         // The last error number of this thread.

/**********************************************************************
 * Message string formatting Functions. This will get the error
 * description text defined by GetLastError() in localized language
 * and assign this text to reference of msgBuffer variable.
 *********************************************************************/
msgStatic = L"Program hatalı bir işlem sonucu durduruldu!...";
fmtString = L"%s\n\nYordam : %s\nKod: %d\nAçıklama : %s";

if ( FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errNo,
0,
( LPTSTR ) &msgBuffer,
0,
NULL
)
  )
/*****************************************************************
* Prepare a formatted Message to display in the MessageBox.
****************************************************************/
StringCchPrintf( Message,    // Message String
BUF_SIZE,   // Max size of Message string
fmtString,  // Format String of Message
msgStatic,  // Argument 1 |
errFunc,    // Argument 2 |
errNo,      // Argument 3 |-> of Format String
msgBuffer   // Argument 4 |
  );

/**********************************************************************
* Show a message box which display the formatted error description
*********************************************************************/
MessageBox( NULL,
Message,            // Message that will be displayed
L"Hatalı İşlem",        // Caption of Message Box
MB_OK | MB_ICONERROR    // Buttons, Icons and sounds
 );
}
//----End of ShowError Function ------------------------------------------

/*************************************************************************
 * Main program function
 ************************************************************************/
int main()
{
HINSTANCE hInstance;
SYSINF sysINF;
SYSTEM_INFO si;
TCHAR cName[BUF_SIZE];
TCHAR uName[BUF_SIZE];
LPCTSTR txt;
TCHAR Info[BUF_SIZE];
DWORD chCount = BUF_SIZE;
TCHAR *cpuArch;

txt = L"Bilgisayar: %s\nKullanıcı: %s\nİşlemci: %d\nMimari: %s";

chCount = BUF_SIZE;
GetComputerName( cName, &chCount );
chCount = BUF_SIZE;
GetUserName( uName, &chCount );

hInstance = LoadLibrary( L"kernel32.dll" );

if ( hInstance == NULL ) {                 // loading DLL failed
ShowError( L"LoadLibrary() : Loading DLL is failed" );
return 1;                             // Exit with error.
}

/**********************************************************************
* "GetNativeSystemInfo" function in "kernel32.dll" is only Windows 7
* and later Operating systems. If this function call fails we must use
* the "GetSystemInfo" API function.
*********************************************************************/
sysINF = ( SYSINF ) GetProcAddress( hInstance , "GetNativeSystemInfo" );

if ( NULL == sysINF ) {                  // Getting DLL's function address failed
ShowError( L"GetProcAddress() : Getting function address is failed." );
GetSystemInfo( &si );                 // not found, use GetSystemInfo API function
}
else
sysINF( &si );                        // found, use this DLL function

switch ( si.wProcessorArchitecture ) {
case PROCESSOR_ARCHITECTURE_AMD64 :
cpuArch = L"64-Bit";
break;

case PROCESSOR_ARCHITECTURE_IA64  :
cpuArch = L"64-Bit";
break;

case PROCESSOR_ARCHITECTURE_INTEL :
cpuArch = L"32-Bit";
break;
}

StringCchPrintf(  Info,                    // Information String
 BUF_SIZE,                // Max size of Info string
 txt,                     // Format String of Info
 cName,                   // Arg 1 |
 uName,                   // Arg 2 |
 si.dwNumberOfProcessors, // Arg 3 |-> of Format String
 cpuArch                  // Arg 4 |
  );

MessageBox( NULL,
( LPCTSTR ) Info,              // Message that will be displayed
L"Sistem Bilgisi",             // Caption of Message Box
MB_OK | MB_ICONINFORMATION     // Buttons, Icons and Sounds
 );

return 0;
}

2 Şubat 2014 Pazar

Java'da matematiksel fonksiyonlar

Java'da tanımlı olan ve matematiksel işlemlerimizde bize yardımcı olacak hazır fonksiyonlar mevcuttur. Bu fonksiyonları kullanmak için java'da herhangi bir kütüphane eklememize gerek yoktur. Diğer dillerde is ekleme yapılmalıdır. Örneğin delphi'de uses kısmında math kütüphanesi eklenmelidir aynı şekilde C programlamada <math.h> kütüphanesi include edilmelidir yani derlemeye dahil edilmelidir.

      Peki java'da neden math kütüphanesi eklemiyoruz? Çünkü java'da math ve lang kütüphaneleri otomatik olarak tanımlanmıştır ve bunları yukarıda tanımlamamıza gerek yoktur. Bu fonksiyonları

==   System.Fonksiyon_ismi ====   şeklinde kullanabiliriz.  Şimdi bu fonksiyonlara bir kaç örnek verelim.

=======================================================================

Font: Small - Normal - Large
  1. public class JavaApplication9 {
  2.     /**
  3.      * @param args the command line arguments
  4.      */
  5.     public static void main(String[] args) {
  6.         // TODO code application logic here
  7.    
  8. /*öncelikle bir sayinin üssünü alalım*/
  9.        
  10. System.out.println(5 + " sayisinin 3. dereceden üssü" + Math.pow(5,3) + " dir");
  11. /* bir sayinin kökünü bulalım */
  12. System.out.println(25 + " sayisinin kare kökü " + Math.sqrt(25) + " dir");
  13. /* 2 sayıdan maximum olanı bulalım */
  14. System.out.println(" 25 ve 24 sayilarindan büyük olani " + Math.max(2524) + " dir");
  15. /*bir sayinin mutlak değerini bulmak */
  16. System.out.println(-45 + " sayisinin mutlak değeri " +  Math.abs(-45) + " dir" );
  17. }
  18. }

=================================================================================
program çıktısı şu şekilde olacaktır;

 5 sayisinin 3. dereceden üssü125.0 dir
 25 sayisinin kare kökü 5.0 dir
 25 ve 24 sayilarindan büyük olani 25 dir
-45 sayisinin mutlak değeri 45 dir

Yararlı olması dileği ile...



   

Java'da metotlara aşırı yükleme (Overloading)


       Java'nın bize sağladığı büyük bir kolaylık, aynı isimde birden fazla metot oluşturabilmemizdir. Tabii ki bu durumda metotları birbirinden ayırt edecek şeyler olmalıdır. Bu da aynı isimdeki metotların aldığı parametre sayıları ve türleridir.
       Peki parametre farklılığından kastımız nedir ?
1-) Örneğin KareAl isminde 2 metodumuz olsun. Ve ikisi de tek parametre alsın. Bu durumda bu 2 metodun aldığı parametre türü aynı olamaz! Yani birisi mesela integer türde parametre alıyorsa diğer metot integer haricinde bir türde parametre almalıdır.

2-)KareAl isminde yine 2 metodumuz olsun. Bu iki metodun aldığı parametre saysı farklı ise bu durumda aldıklarını parametre türlerini kontrol etmeye gerek yok. Yani ilk metot bir tane integer parametre alıyorsa, ikinci metot 2 parametre alabilir. Bu durumda 2. metot istenilen türde parametreler alabilir.

ÖRNEK1: Java'da bir sayının karesini almak.
=====================================================================
public class JavaApplication9 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
 
    System.out.println(KareAl(5));       /* fonksiyona integer değer gönderildi.*/
    System.out.println(KareAl(4.5));    /*fonksiyona double değer gönderildi*/
    }
    public static double KareAl(double gelen) { /*double değer gelmesi halinde bu metot çalışır */
    return gelen*gelen;
    }
    public static double KareAl(int gelen) {  /*integer değer gelmesi halinde bu metot çalışır */
    return gelen*gelen;
    }
=======================================================================

ORNEK2: Javada farklı sayıda parametre alan aynı isimde metotlar kullanmak.

=======================================================================

public class JavaApplication9 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
 
    fnk(10,20);   /* fonksiyona 2 parametre gönderildi */
    fnk(5);        /* fonksiyona tek parametre gönderildi */
    }
 
    public static void fnk (int gelen1, int gelen2) { /* 2 parametre gönderilirse bu metot çalışır */
    System.out.println("fonksiyona 2 parametre gönderildi");
    }
    public static void fnk (int gelen) {    /* tek parametre gönderilirse bu metot çalışır */
    System.out.println("fonksiyona tek parametre gönderildi");
    }
}

========================================================================


Yararlı olması dileği ile....

Java'da System.lineSeparator() komutu

Seperator'un kelime anlamı ayırıcı, ayrıştırıcıdır. Komutun yaptığı işlem de tam olarak budur. İsminden de anlaşılacağı gibi satır ayırma işlemi yapmaktadır. C programlama ile ilgilendiyseniz, bu komutun oradaki karşılığının " \n " ifadesi olduğunu anlamışsınızdır. C programlamadan hatırlarsanız, ekrana bir ifade basmak için printf komutunu kullanıyorduk. Printf komutunda "\n" kullanınca sonraki basılmak istenen ifade alt satıra basılıyordu. Yani " \n " ifadesi, bu ifadeden önce yazılan ve sonra yazılan metinlerin ayrı ayrı satırlara bölüyordu;

====C programlama örnek===

printf(" Bu bir C projesi");
printf(" Bu da bir C projesi");

=====================

Yukarıdaki örneğimizde programı derlersek çıktı şu şekilde olacaktır;

*Bu bir C projesi Bu da bir C projesi.

===C programlama örnek 2===

printf("Bu bir C projesi \n Bu da bir C projesi");

======================

Bu örnekte ise çıktımız şu şekilde olacaktır;

*Bu bir C projesi
  Bu da bir C projesi

Görüldüğü \n ifadesi metinlerin 2 satıra bölünmesini sağladı ve 2. gelen metin 2. satırdan başladı.

Peki bunu java'da nasıl uygularız ?

====JAVA örnek=====

System.out.print("Bu bir java ifadesi");
System.out.print("Bu da bir java ifadesi");

==================

Bu örnekte de C'nin ilk örneğindeki gibi her iki metni aynı satıra basacaktır.

======JAVA örnek2=======
System.out.print("Bu bir java projesi" + System.lineSeparator() );

System.out.print("Bu da bir java projesi");

=======================

Bu ikinci örnekte artık metinler ayrı ayrı satırlar şeklinde ekrana basılacaktır.

NOT: Bu örnekte System.out.print("METIN"+ System.lineSeparator()); yerine sadece System.out.println("METIN"); de kullanabilirdik; Yani kısaca,

System.out.print("metin"+System.lineSeparator()) ve System.out.println("metin")
 kodları aynı anlama gelirler.



Yararlı olması dileği ile...