Initial Commit

This commit is contained in:
2025-11-09 19:23:54 +10:00
commit ee4c668514
4 changed files with 146 additions and 0 deletions

73
.gitignore vendored Normal file
View File

@@ -0,0 +1,73 @@
## Build output
bin/
obj/
out/
artifacts/
## Visual Studio / JetBrains Rider / VS Code
.vs/
.idea/
*.suo
*.user
*.userosscache
*.sln.docstates
## NuGet
*.nupkg
*.snupkg
packages/
.nuget/
**/project.lock.json
**/project.fragment.lock.json
**/artifacts/
## Logs
*.log
*.tlog
## Cache
*.cache
*.db
*.db-shm
*.db-wal
## Backup files
*.bak
*.orig
## OS junk
.DS_Store
Thumbs.db
ehthumbs.db
Desktop.ini
## ASP.NET / IIS (if added later)
App_Data/
*.pubxml
*.publishsettings
## dotnet user secrets
**/secrets.json
*.secret
## .NET generated
*.deps.json
*.runtimeconfig.json
*.runtimeconfig.dev.json
## F# specific
*.fsi
*.fsjs
## Rider
.idea/
*.DotSettings.user
## VS Code
.vscode/
.history/
## JetBrains / ReSharper
_ReSharper.Caches/
_ReSharper*/
*.DotSettings.user

16
TuneBladeFixer.sln Normal file
View File

@@ -0,0 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TuneBladeFixer", "TuneBladeFixer\TuneBladeFixer.fsproj", "{32FAC1E4-2EE4-4365-8185-8732F70E983B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{32FAC1E4-2EE4-4365-8185-8732F70E983B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32FAC1E4-2EE4-4365-8185-8732F70E983B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32FAC1E4-2EE4-4365-8185-8732F70E983B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32FAC1E4-2EE4-4365-8185-8732F70E983B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

45
TuneBladeFixer/Program.fs Normal file
View File

@@ -0,0 +1,45 @@
open System
open System.Runtime.InteropServices
open System.Text
[<DllImport("user32.dll", SetLastError = true)>]
extern IntPtr FindWindow(string lpClassName, string lpWindowName)
[<DllImport("user32.dll", SetLastError = true)>]
extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow)
[<DllImport("user32.dll", SetLastError = true)>]
extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount)
[<DllImport("user32.dll", SetLastError = true)>]
extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam)
let WM_CLOSE = 0x0010u
let getClassName (hWnd: IntPtr) =
let sb = StringBuilder(256)
if GetClassName(hWnd, sb, sb.Capacity) > 0 then
sb.ToString()
else
""
[<EntryPoint>]
let main _ =
printfn "Running TuneBlade error suppressor..."
while true do
let hwnd = FindWindow(null, "TuneBlade")
if hwnd <> IntPtr.Zero then
let cls = getClassName hwnd
if cls = "#32770" then
printfn "TuneBlade error dialog detected closing."
PostMessage(hwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero) |> ignore
let mutable child = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "#32770", "TuneBlade")
while child <> IntPtr.Zero do
printfn "Closing TuneBlade dialog window..."
PostMessage(child, WM_CLOSE, IntPtr.Zero, IntPtr.Zero) |> ignore
child <- FindWindowEx(IntPtr.Zero, child, "#32770", "TuneBlade")
System.Threading.Thread.Sleep(2000)
0

View File

@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs"/>
</ItemGroup>
</Project>