2016-03-19 4 views
0

私は別のプログラムを監視するためにC#アプリケーションを使用していますが、非アクティブが検出されたときにボタンをクリックするだけです。C言語でプログラム設定やINI(カスタムクラス)から16進値をintとしてロードするにはどうすればよいですか?

私はピンボケを使用しています。私の問題は、16進形式のINIからボタンコントロールIDをロードしています。 inifは単に16進文字列( "000003F2")のINIファイルを読み込みます。

//Load control id from INI file 
public int m_button_id; 
int m_button_id = Int32.Parse(inif.Read("MMonitor", "button_id")); 

今、私は次のように動作するようにこれが必要...

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
static extern IntPtr GetDlgItem(IntPtr hWnd, int nIDDlgItem); 

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam); 

//Click Button 
IntPtr hWndButton = GetDlgItem(m_handle, m_button_id); 
int wParam = (BN_CLICKED << 16) | (m_button_id & 0xffff); 
SendMessage(m_handle, WM_COMMAND, wParam, hWndButton); 

m_button_idは六角ない小数点以下の形式でなければなりません。 INIからこの "000003F2"をロードし、それをm_button_idに等しく設定する必要があります。私はそれが文字列であるので、非常に多くの問題を抱えています。

私は手動で設定した場合、これが正常に動作します...

public int m_button_id = 0x3F2; 

答えて

0

使用Convert.ToInt32(hexString, 16)

またはint.Parse(hexString, System.Globalization.NumberStyles.HexNumber)

+0

私はそれを逃した信じることができません。答えをありがとう! –

+0

例外がスローされました:System.dllの 'System.ComponentModel.Win32Exception' - これを取得し、intに16進数をロードしません。それは0xをトリムし、任意の数を保持します。ただし、文字列に16進文字が含まれている場合は、上記のような例外がスローされます。 –

+0

エラー(行)と魔女の入力データはどこですか? – Kalten