VBAでのWindows API関数EnumWindowsの定義は下記になっています。
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
そこで、コールバック関数(lpEnumFunc)へのパラメータ(lParam)に文字列を指定したくて定義を下記のように変更しましたが旨く行きません。(定義をこのように変更することが許されているかも分っていませんが)
変更前:ByVal lParam As Long
変更後:ByRef lParam As String
EnumWindowsのコールバック関数へのパラメータに文字列を指定する方法があれば教えて頂きたくよろしくお願いします。
こんにちはVB学習を始めて2週間になりました。
Webの記事などを参考にしていますがバージョンによって記述が変わって苦戦しています。
今回ご質問したい内容です。
ボタンを押すとメモ帳が起動されているか調べてそのウィンドウタイトルを得る
ウィンドウタイトルで検索してハンドルを取得してそのままそのハンドルで逆に
ウィンドウタイトルを得ています(無意味な処理ですが学習用という事で)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Integer, ByVal lpString As String, ByVal nMaxCount As Integer) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ECHandle As Integer
Dim Titlename As String
Titlename = vbNullString
ECHandle = FindWindow(vbNullString, "無題 - メモ帳")
GetWindowText(ECHandle, Titlename, 255)
Label5.Text = Titlename
If ECHandle = 0 Then
Label4.Text = "取得できない"
Else
Label4.Text = "取得出来た" & ECHandle & Titlename
End If
End Sub
結果はというと Titlename が空っぽのままでタイトルが取得できません
どのような原因が考えられますでしょうか?
よろしくお願いいたします。
今回初めて質問させていただきます。
現在、稼動しているシステムのソリューションを開こうとした際に
下記のメッセージが表示され、VBプロジェクトファイルを開くことができません。
「'(プロジェクトの場所)' を開けません。このバージョンのアプリケーションではサポートされないプロジェクトの種類(.vbproj)です。
この種類のプロジェクトをサポートするバージョンを使用してください。」
前回、開いてからそのプロジェクト自体には触っていないので、
過去のバージョンのプロジェクト
Windows updateかVisual Studio自体の設定の問題かと予測しているのですが、
原因がつかめません。
【環境】
Microsoft Visual Studio 2008
Version 9.0.30729.1 SP
Microsoft .NET Framework
Version 3.5 SP1
Windows server 2008 sp2
知恵をお貸し下さい。
ちなみに以前にも同様の問題で質問が出ていたのですが、
参照ページのリンクが切れており、解決することができませんでした。
http://okwave.jp/qa/q4948668.html
よろしくお願い致します。
中を見ていただき、ありがとうございます。
Visual Basic 6.0 をWinXP SP3で使って、メモを作っています。
機能としては非常に単純で、書き込み用のテキストボックス(以下Text1とします)と記録用のテキストボックス(つまりLocked=Trueとして書き込めないようにしている:以下Text2とします)があって、(1)Text1にメモを書いてEnterを押せば、(2)その内容がText2に転写され、(3)Text1の内容は消える、というものです。
ところが、以下のプログラムによってこれを実装しようとしたところ、Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が自動的に改行された状態になってしまい、必ず2行目から文章を打たなくてはいけないようになってしまいます。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Text2.Text = Text2.Text & vbclrf & Text1.Text
Text1.Text = ""
End If
End Sub
使用する上では特に問題無いのですが、見た目が少し悪いので、この1行目の「自動改行」をキャンセルする方法をご存知の方がいらっしゃいましたら、ご教授くださいますようお願い致します。
中を見ていただき、ありがとうございます。
Visual Basic 6.0 をWinXP SP3で使って、メモを作っています。
機能としては非常に単純で、書き込み用のテキストボックス(以下Text1とします)と記録用のテキストボックス(つまりLocked=Trueとして書き込めないようにしている:以下Text2とします)があって、(1)Text1にメモを書いてEnterを押せば、(2)その内容がText2に転写され、(3)Text1の内容は消える、というものです。
ところが、以下のプログラムによってこれを実装しようとしたところ、Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が自動的に改行された状態になってしまい、必ず2行目から文章を打たなくてはいけないようになってしまいます。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Text2.Text = Text2.Text & vbclrf & Text1.Text
Text1.Text = ""
End If
End Sub
使用する上では特に問題無いのですが、見た目が少し悪いので、この1行目の「自動改行」をキャンセルする方法をご存知の方がいらっしゃいましたら、ご教授くださいますようお願い致します。
中を見ていただき、ありがとうございます。
Visual Basic 6.0 をWinXP SP3で使って、メモを作っています。
機能としては非常に単純で、書き込み用のテキストボックス(以下Text1とします)と記録用のテキストボックス(つまりLocked=Trueとして書き込めないようにしている:以下Text2とします)があって、(1)Text1にメモを書いてEnterを押せば、(2)その内容がText2に転写され、(3)Text1の内容は消える、というものです。
ところが、以下のプログラムによってこれを実装しようとしたところ、Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が自動的に改行された状態になってしまい、必ず2行目から文章を打たなくてはいけないようになってしまいます。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Text2.Text = Text2.Text & vbclrf & Text1.Text
Text1.Text = ""
End If
End Sub
使用する上では特に問題無いのですが、見た目が少し悪いので、この1行目の「自動改行」をキャンセルする方法をご存知の方がいらっしゃいましたら、ご教授くださいますようお願い致します。
中を見ていただき、ありがとうございます。
Visual Basic 6.0 をWinXP SP3で使って、メモを作っています。
機能としては非常に単純で、書き込み用のテキストボックス(以下Text1とします)と記録用のテキストボックス(つまりLocked=Trueとして書き込めないようにしている:以下Text2とします)があって、(1)Text1にメモを書いてEnterを押せば、(2)その内容がText2に転写され、(3)Text1の内容は消える、というものです。
ところが、以下のプログラムによってこれを実装しようとしたところ、Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が自動的に改行された状態になってしまい、必ず2行目から文章を打たなくてはいけないようになってしまいます。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Text2.Text = Text2.Text & vbclrf & Text1.Text
Text1.Text = ""
End If
End Sub
使用する上では特に問題無いのですが、見た目が少し悪いので、この1行目の「自動改行」をキャンセルする方法をご存知の方がいらっしゃいましたら、ご教授くださいますようお願い致します。