|
Hello,
I want to send a message/test to a other windows.
It should save me many time in putting me many time
strings/textes in MS Project, Outlook, ... ...
Therefore i want to use the Windwos API in VB.net.
I tried it in this way, but it doesn't work.
I get the windows handle, but the text isn't set at notepad or in a other window.
Private Sub tmr_Worktimer_Tick(sender As Object, e As EventArgs) Handles tmr_Worktimer.Tick
If IsKeyPressed(Keys.VK_SHIFT) Then
Dim aPoint As New POINTAPI
GetCursorPos(aPoint)
Dim hWnd As IntPtr = WindowFromPoint(aPoint.x, aPoint.y)
SetForegroundWindow(hWnd)
SetWindowTextUnicode(hWnd, WM_SETTEXT, IntPtr.Zero, "Test")
End If
End Sub
My API Calls are:
Public Structure Keys
Const VK_BACK As Short = &H8
Const VK_TAB As Short = &H9
Const VK_RETURN As Short = &HD
Const VK_SHIFT As Short = &H10
Const VK_CONTROL As Short = &H11
Const VK_MENU As Short = &H12
Const VK_CAPITAL As Short = &H14
Const VK_ESCAPE As Short = &H1B
Const VK_SPACE As Short = &H20
Const VK_PRIOR As Short = &H21
Const VK_NEXT As Short = &H22
End Structure
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Public Function GetAsyncKeyState(ByVal vKey As Int32) As Short
End Function
Public Function IsKeyPressed(ByVal KeyToCheck As Short) As Boolean
Dim res As Short
res = GetAsyncKeyState(KeyToCheck)
If res < 0 Then
IsKeyPressed = True
Else
IsKeyPressed = False
End If
End Function
<System.Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)>
Public Structure POINTAPI
Dim x As Integer
Dim y As Integer
End Structure
<DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)>
Public Function GetCursorPos(ByRef lpPoint As POINTAPI) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("user32.dll")>
Public Function WindowFromPoint(xPoint As Integer, yPoint As Integer) As IntPtr
End Function
<DllImport("user32.dll")>
Public Function SetForegroundWindow(hWnd As IntPtr) As Boolean
End Function
Friend Const WM_SETTEXT As Integer = 12
<DllImport("user32.dll", EntryPoint:="SendMessageW", CharSet:=CharSet.Unicode)>
Public Function SetWindowTextUnicode(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr
End Function
Any ideas? Is there a other way to send the string/text?
|
|
|
|
|
You need to use the debugger to see which of those API calls is failing. As it stands your code has no idea whether anything works.
|
|
|
|
|
The problem is, it didn't fail.
So i ask, if i use the right api call.
Or is there a better way to copy a string to a other textbox on a foreight form/app, then the "SendMessageW" API call?
|
|
|
|
|
Seek51 wrote: The problem is, it didn't fail. That is not what you said in your original question. So you need to be much more specific about the actual problem you have.
|
|
|
|
|
Seek51 wrote: The problem is, it didn't fail.
How exactly do you know that? Did you run it in the debugger?
Otherwise I don't see an exception handler.
And you are not looking at return values. For example SetForegroundWindow() which returns a boolean. And that value tells you whether it worked or not.
|
|
|
|
|
Myself that certainly does not look to me like that code would work.
Best I can see you are perhaps sending text to the desktop?
In other words the Windows UI is not the same as the processes that run.
When I googled for this solutions the Microsoft code I found suggests exactly what I would expect the process to be.
How to: start an Application and send it Keystrokes - Visual Basic | Microsoft Learn[^]
I suppose it might be possible to find an app using the UI, but sending key presses to it will still require the proc id.
|
|
|
|
|
|
As most of the comments suggest above, use a debugger in your code. You have a lot of else statements that will override a normal error, which is why you get no errors but also no warnings/comments in your log file...
|
|
|
|
|
Hello everyone,
I have a case with vlc on my ubuntu container. Indeed, my c# method :
<pre lang="C#">if (File.Exists(video.Path))
{
using (var libVLC = new LibVLC(enableDebugLogs: true))
{
this.logger.LogInformation($"ImageDetectionWorker.StartFramesPredictionVLC : VLC lib initialized")
if (Directory.Exists("/shared-volume/vlc" == false))
{
Directory.CreateDirectory("/shared-volume/vlc")
}
libVLC.SetLogFile($"/shared-volume/vlc/vlc.log";)
var absoluteVideoPath = new FileInfo(video.Path.FullName)
using (var media = new Media(libVLC, absoluteVideoPath, options: "--no-audio --no-xlib --no-sout-audio"))
{
this.logger.LogInformation($"ImageDetectionWorker.StartFramesPredictionVLC : VLC media initialized")
using (var mediaPlayer = new MediaPlayer(media))
{
this.logger.LogInformation($"ImageDetectionWorker.StartFramesPredictionVLC : VLC media player initialized")
mediaPlayer.ToggleMute()
Throw this logs in my container:
info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : Start to initialize VLC core info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : VLC core initialized [00007f897c0027e0] main libvlc debug: VLC media player - 3.0.20 Vetinari [00007f897c0027e0] main libvlc debug: Copyright © 1996-2023 the VideoLAN team [00007f897c0027e0] main libvlc debug: revision 3.0.20-0-g6f0d0ab126b [00007f897c0027e0] main libvlc debug: configured with ./configure '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-option-checking' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-debug' '--config-cache' '--disable-update-check' '--enable-fast-install' '--docdir=/usr/share/doc/vlc' '--with-binary-version=3.0.20-0+deb11u1' '--enable-a52' '--enable-aa' '--enable-aribsub' '--enable-avahi' '--enable-bluray' '--enable-caca' '--enable-chromaprint' '--enable-chromecast' '--enable-dav1d' '--enable-dbus' '--enable-dca' '--enable-dvbpsi' '--enable-dvdnav' '--enable-faad' '--enable-flac' '--enable-fluidsynth' '--enable-freetype' '--enable-fribidi' '--enable-gles2' '--enable-gnutls' '--enable-harfbuzz' '--enable-jack' '--enable-kate' '--enable-libass' '--enable-libmpeg2' '--enable-libxml2' '--enable-lirc' '--enable-mad' '--enable-matroska' '--enable-mod' '--enable-mpc' '--enable-mpg123' '--enable-mtp' '--enable-ncurses' '--enable-notify' '--enable-ogg' '--enable-opus' '--enable-pulse' '--enable-qt' '--enable-realrtsp' '--enable-samplerate' '--enable-sdl-image' '--enable-sftp' '--enable-shine' '--enable-shout' '--enable-skins2' '--enable-soxr' '--enable-spatialaudio' '--enable-speex' '--enable-svg' '--enable-svgdec' '--enable-taglib' '--enable-theora' '--enable-twolame' '--enable-upnp' '--enable-vdpau' '--enable-vnc' '--enable-vorbis' '--enable-x264' '--enable-x265' '--enable-zvbi' '--with-kde-solid=/usr/share/solid/actions/' '--disable-aom' '--disable-crystalhd' '--disable-d3d11va' '--disable-decklink' '--disable-directx' '--disable-dsm' '--disable-dxva2' '--disable-fdkaac' '--disable-fluidlite' '--disable-freerdp' '--disable-goom' '--disable-gst-decode' '--disable-libtar' '--disable-live555' '--disable-macosx' '--disable-macosx-avfoundation' '--disable-macosx-qtkit' '--disable-mfx' '--disable-microdns' '--disable-opencv' '--disable-projectm' '--disable-schroedinger' '--disable-sparkle' '--disable-srt' '--disable-telx' '--disable-vpx' '--disable-vsxu' '--disable-wasapi' '--enable-alsa' '--enable-dc1394' '--enable-dv1394' '--enable-libplacebo' '--enable-linsys' '--enable-nfs' '--enable-udev' '--enable-v4l2' '--enable-wayland' '--enable-libva' '--enable-vcd' '--enable-smbclient' '--disable-oss' '--enable-mmx' '--enable-sse' '--disable-neon' '--disable-altivec' '--disable-omxil' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -ffile-prefix-map=/build/reproducible-path/vlc-3.0.20=. -fstack-protector-strong -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -ffile-prefix-map=/build/reproducible-path/vlc-3.0.20=. -fstack-protector-strong -Wformat -Werror=format-security ' 'OBJCFLAGS=-g -O2 -ffile-prefix-map=/build/reproducible-path/vlc-3.0.20=. -fstack-protector-strong -Wformat -Werror=format-security' [00007f897c0027e0] main libvlc debug: searching plug-in modules [00007f897c0027e0] main libvlc debug: loading plugins cache file /usr/lib/x86_64-linux-gnu/vlc/plugins/plugins.dat [00007f897c0027e0] main libvlc debug: recursively browsing `/usr/lib/x86_64-linux-gnu/vlc/plugins' [00007f897c0027e0] main libvlc debug: plug-ins loaded: 519 modules [00007f897c001ad0] main logger debug: looking for logger module matching "any": 4 candidates [00007f897c001ad0] main logger debug: using logger module "console" [00007f897c0027e0] main libvlc debug: translation test: code is "C" [00007f8984270880] main keystore debug: looking for keystore module matching "memory": 4 candidates [00007f8984270880] main keystore debug: using keystore module "memory" [00007f897c0027e0] main libvlc debug: CPU has capabilities MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX AVX2 FPU info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : VLC lib initialized info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : VLC media initialized info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : VLC media player initialized info: EigenVectors.PredictionWrite.Api.Workers.ImageDetectionWorker[0] ImageDetectionWorker.StartFramesPredictionVLC : True ALSA lib confmisc.c:767:(parse_card) cannot find card '0' ALSA lib conf.c:4745:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
My Dockerfile :
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app
EXPOSE 80
COPY . .
RUN dotnet restore MyProject.csproj
RUN dotnet publish MyProject.csproj -c Release -o out --no-restore
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build-env /app/out .
RUN apt-get update && apt-get install -y vlc && apt-get install libvlc-dev
ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
ENTRYPOINT ["dotnet", "MyProject.dll"]
I've tried a lot of package to install on the container without any success
|
|
|
|
|
Quote: ALSA lib confmisc.c:767:(parse_card) cannot find card '0' ALSA lib conf.c:4745:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory ALSA lib confmisc.c:392:(snd_func_concat) error
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Lets start off with a little honesty - I am unsure of exactly what I am asking, but I am sure that someone can help.
So I currently have Visual Studio 17.8 installed. I predominantly work in VB.NET. I have some older code downloaded from Github, that works just fine (as binary) when it was put together say 10 or more years ago. The crux of the problem is that you (and by you, I mean me) cannot in some cases simply drop it into VS 17.8 without several errors.
Therefore, the naïve question is - can anyone point to a good source of information that would guide me on how to "upgrade" older code to eliminate errors in compiling with the current versions of VS and .NET?
THanks.
Pound to fit, paint to match
|
|
|
|
|
I'm interested ... what is older VB.Net Code and what is newer Code ?
I would say that your question isn't to answer without more and specific Info ...
|
|
|
|
|
You make a copy of the project, and try and compile it; then you can catastrophize.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
lewist57 wrote: cannot in some cases simply drop it into VS 17.8 without several errors
Without the code and the specific errors, its impossible to tell you what the problem is.
At a guess, are you trying to open a project that targets a version of .NET / .NET Framework for which you haven't installed the relevant VS targeting pack?
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
It all depends on what the errors are. So you need to post a properly detailed question.
|
|
|
|
|
Ok, my previous post was a great example of how not to describe what I am looking for, mea culpa.
To give a more concrete example: Fast Colored Textbox is available here on CodeProject, as well as Github. It was posted in 2014, and has a target framework of .NET Framework 3.5. With VS 2022 17.8.2 (as of yesterday), the default target framework is .NET 8.0.
To clarify: evidently, even though I am sure that Microsoft works very hard to keep backward compatibility, the process of upgrading the program to .NET 8.0 is not trouble free. When you open the original files and start building, VS 2022 starts with a "One-way upgrade" conversion, and it says it successfully migrated. When you build the project, you get a dozen errors about "invalid RESX file".
Now I have not dug into the errors per se, but the naïve question is what is the root cause of these errors? Is it:
a) Just a matter of ensuring all supporting files are in a location that the compiler can work with, or
b) You can't count on the "one way upgrade" to do everything for you, or
c) There is code from 2008 - 2014 .NET 3.5 that is not compatible with .NET 8.0, or
d) all of the above, or something else
Of the three, it is item C that I am mainly concerned with.
Hope this makes more sense than the original post. Thanks to all for input received to date.
BTW: I mentioned that I work mainly in VB.NET as a nice way of saying I do not do programming for a living.
Pound to fit, paint to match
modified 1-Dec-23 9:47am.
|
|
|
|
|
Well, apart from saying you got "invalid RESX file"., we still have no idea what the problem is. As it is the .resx file is an XMLschema attached to the project properties, so you could try deleting it and let Visual Studio try to rebuild it. Of course, that assumes you have safely kept the original.
|
|
|
|
|
Thanks I will give that a try.
To distill things down further: is it possible that code written 10+ years ago will have problems building under .NET 8.0 and will require re-writing the code to build successfully? Or is the one way upgrade system good at catching potential problems and resolving the changes to the code?
Pound to fit, paint to match
|
|
|
|
|
That is impossible to answer; the only way to find out is to try it. Make sure that any generated files are removed from the project first, so you only have the .sln, .csproj/.vbproj, and source files that you created. Then once you run the build you should quickly be able to see what needs manual intervention.
|
|
|
|
|
Agree with this 100%. The longer and time consuming method but probably the best and safest method is to clean the project and just run the solution, then start adding items - dll's, files etc one by one and compile. If it loads, all fine, if it fails, look for a solution to why it failed. This way you will save yourself hours of debugging by pinpointing the actual cause of failure, once remedied, move to the next.
|
|
|
|
|
I guess you and I have probably been through this process once or twice. I have a Powershell script that purges all the object files from my projects when upgrading Visual Studio.
|
|
|
|
|
Indeed, bump your head once and learn from it, bump it twice and there is no medicine for the pain...
|
|
|
|
|
The solution and project file formats for older versions of Visual Studio changed dramatically over the years. You opening an old .NET 3.5 project in a newer Visual Studio requires conversion of the project files (*.vbproj) and related to the updated formats.
This has nothing to do with .NET 8.0.
If you got the code from GitHub - PavelTorgashov/FastColoredTextBox: Fast Colored TextBox for Syntax Highlighting. The text editor component for .NET.[^], that solution has two projects, that target two different .NET Framework versions. You need to have both framework versions installed, .NET Framework 2.0 and .NET Framework 3.5. Just Google for ".NET Framework download" to get them.
|
|
|
|
|
lewist57 wrote: I am sure that Microsoft works very hard to keep backward compatibility,
I suspect they don't work that hard.
For starters the general idea in programming is if you do a major version upgrade then breaking changes are allowed.
After that it is just a matter of deciding what one should break or not. But one also does things like decided what new features to add and, sometimes, if something should be redone just to make it 'better'. Then one also needs to throw in required security fixes.
All of that leads to complexity. The more code involved the more complex it becomes. So I suspect that although some consideration is given to backward compatibility, if even considered it is not a driving force.
But I would not fault Microsoft for that. Any company would deal with the same scope of problems.
|
|
|
|
|
"Resource" files always seem to be a challenge; but it's not a "code" thing. It's how they were created or referenced in the first place. I "compress" my resources and you can't (always) compress in one framework and expect it to works in another ("Framework" versus Standard versus UWP versus WPF). No "error message"; just "different" (wrong) results.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|